Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
19 / 11 / 0
Регистрация: 28.11.2014
Сообщений: 151
1

Почему треугольник рисуется и исчезает? SFML

01.12.2014, 17:47. Показов 1487. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всех с 1м декабря

Создаю вот такой абстрактный класс

C++
1
2
3
4
5
6
7
8
9
#pragma once
class Figure
{
public:
    Figure(void);
    ~Figure(void);
 
    virtual void CreateFigure() = 0;
};
От него унаследую еще два класса треугольник и квадрат вот они:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include "figure.h"
#include <SFML/Graphics.hpp>
#pragma comment(lib,"sfml-graphics.lib")
 
class Triangle :
    public Figure
{
public:
    Triangle(void);
    ~Triangle(void);
 
     void CreateFigure();
     sf::VertexArray GetAr();
 
private:
    sf::VertexArray m_ar;
};
Реализация треугольника

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Triangle::CreateFigure()
{
    sf::VertexArray tr(sf::Triangles,3);
 
    tr[0].position = sf::Vector2f(10,10);
    tr[1].position = sf::Vector2f(100,10);
    tr[2].position = sf::Vector2f(100,100);
 
    tr[0].color = sf::Color::Magenta;
    tr[1].color = sf::Color::Blue;
    tr[2].color = sf::Color::Cyan;
    tr[3].color = sf::Color::Red;
 
    m_ar = tr;
 
 
}
 
sf::VertexArray Triangle::GetAr()
{
    return m_ar;
 
}
Квадрат:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Quad :
    public Figure
{
public:
    Quad(void);
    ~Quad(void);
    void CreateFigure();
    sf::VertexArray getAr();
    sf::Texture& getTex();
    sf::Transform getTr();
    
 
private:
    sf::VertexArray m_ar;
    sf::Texture m_txt;
    sf::RenderWindow m_win;
    sf::Transform m_tr;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void Quad::CreateFigure()
{
    sf::VertexArray quad_(sf::Quads,4);
    sf::Transform trs;
    trs.translate(sf::Vector2f(300,300));
 
quad_[0].position = sf::Vector2f(10, 10);
quad_[1].position = sf::Vector2f(110, 10);
quad_[2].position = sf::Vector2f(110, 110);
quad_[3].position = sf::Vector2f(10, 110);
 
// define its texture area to be a 25x50 rectangle starting at (0, 0)
quad_[0].texCoords = sf::Vector2f(0, 0);
quad_[1].texCoords = sf::Vector2f(25, 0);
quad_[2].texCoords = sf::Vector2f(25, 50);
quad_[3].texCoords = sf::Vector2f(0, 50);
 
sf::Texture txt; txt.loadFromFile("Data//MyCube.jpg");
 
m_ar = quad_;
m_tr = trs;
}
 
sf::Transform Quad::getTr()
{
    return m_tr;
}
 
 
sf::VertexArray Quad::getAr()
{
    return m_ar;
}
 
sf::Texture& Quad::getTex()
{
    return m_txt;
}
Теперь в главном исходнике рисую и то и другое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 RenderWindow window(vm,"IceCube v2.0");
 
    window.setVerticalSyncEnabled(true);
 
   /* LoadBackground(window);
        LoadMusic();
    GetField(window);*/
 
    tr.CreateFigure(); // рисую треугольник
    sf::VertexArray va = tr.GetAr(); // получаю массив вершин
    window.draw(va); // выводим на экран
    window.display();
    
 
    
    quad_.CreateFigure();
    sf::VertexArray va_ = quad_.getAr(); // массив вершин
    sf::Texture t_ = quad_.getTex();       // текстура
    sf::Transform tt = quad_.getTr();     //  перенос подальше от треугольника
    window.pushGLStates();                 // сохраняю треугольник
    window.draw(va_,tt);                    
    window.display();
    window.popGLStates(); // восстанавливаю
Вопрос почему треугольник рисуется и исчезает ведь сохраняю матрицу pushGLStates(); Или как то неправильно сохраняю?

Добавлено через 7 часов 46 минут
В смысле понимаю что неправильно а где? (((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2014, 17:47
Ответы с готовыми решениями:

Почему в окне SFML не отображается содержимое?
Здравствуйте. Пытаюсь написать приложение на SFML, и возникла проблема. Когда я создаю окно, оно...

SFML в C::B пытается что-то найти в D:\sfml-release\ которого нет
Добрый день, вторые сутки пытаюсь подключить SFML библиотеку к C::B. При подключении по мануалу с...

Почему у меня не рисуется треугольник, а появляется пустое окно
#include&lt;iostream&gt; #include&lt;GL/glut.h&gt; using namespace std; void disp(void){...

Не рисуется треугольник :(
Не рисуется треугольник:( делаю вот по этому уроку:...

2
19 / 11 / 0
Регистрация: 28.11.2014
Сообщений: 151
15.12.2014, 10:41  [ТС] 2
Простая ведь вроде задача и никто не хочет сказать... тогда подскажите как надо "оформить" рисование различных объектов в главном цикле что более правильно или из любого класса где попало?
0
19 / 11 / 0
Регистрация: 28.11.2014
Сообщений: 151
20.12.2014, 20:45  [ТС] 3
Чтобы не плодить темы буду спрашивать здесь. вот функция glTexCoord2 применяется для указания текстурных координат обычно встречается в построении фигуры методом glBegin()...glEnd() а что делать если использую построение фигуры древним методом glutSolidSphere нуу вообщем такие функции которым не требуется указывать вершины как тогда указывать вершины?

Что можно использовать для загрузки текстуры на видюхе которая opengl 3.0 точно не поддерживает? понимаю что можно вручную загрузить считать байты фото но все же??? С этим devil я вижу постоянные проблемы не могу через него загрузить текстуру.

Добавлено через 31 минуту
не получается и вручную установить текстуру, вставил ее в метод класса там же и рисую цилиндр чтобы на него наложить текстуру
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
GLuint Field::LoadTexture( const char * filename )
{
 
  GLuint texture;
 
  int width, height;
 
  unsigned char * data;
 
  FILE  *file;
 
glEnable(GL_TEXTURE_2D);
 
  file = fopen(filename, "rb" );
 
  if ( file == NULL ) return 0;
  width = 1024;
  height = 512;
  data = (unsigned char *)malloc( width * height * 3 );
  //int size = fseek(file,);
  fread( data, width * height * 3, 1, file );
  fclose( file );
 
 for(int i = 0; i < width * height ; ++i)
{
   int index = i*3;
   unsigned char B,R;
   B = data[index];
   R = data[index+2];
 
   data[index] = R;
   data[index+2] = B;
 
}
 
 
glGenTextures( 1, &texture );
glBindTexture( GL_TEXTURE_2D, texture );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
 
 
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT );
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height,GL_RGB, GL_UNSIGNED_BYTE, data );
 
 
    glPushMatrix(); 
    glTranslatef(100,100,0);
    //glColor3f(0,1.0,0);
 
    glutSolidCylinder(100,100,64,64);
    glPopMatrix();
 
    
        glFlush();
    glutSwapBuffers();
 
free( data );
 
return texture;
}
Добавлено через 4 минуты
Выводится цилиндр и становится еле розовым,текстура ярко красная. с фильтрацией что-то не правильно? все вроде бы перепробывал. ладно девил не загрузил текстуру,но и в ручную не получается, значит в чем то другом проблема, помогите люди добрые
0
20.12.2014, 20:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2014, 20:45
Помогаю со студенческими работами здесь

Треугольник рисуется не до конца
На панеле рисуется треугольник, но когда пользователь начинает его перемещать, то он рисуется...

Не рисуется треугольник при использовании шейдеров
Никак не получается нарисовать цветной треугольник при помощи шейдеров. Никаких ошибок не выдает,...

Почему не рисуется куб?
Добрый день! Я новичёк в DirectX и у меня проблемка! В коде вроде всё норм, а куб так и не...

Почему ничего не рисуется?
Показывается черное окно с FPS и все. SharpGL using SharpGL; using System.Windows.Forms; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru