powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Материалы в openGL
5 сообщений из 5, страница 1 из 1
Материалы в openGL
    #38444381
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Приступил к осваиванию C++, ну и решил сразу взять по крупному и написать игровой движок (ну или попытаться хотя бы)... Как бы двух зайцев :)

Так вот, основной вопрос в том, что я не могу разобраться с материалами... казалось бы всё просто. но у меня почему-то всё полупрозрачное, хотя я явно задаю непрозрачный материал.

Сам код вот:
Код: plaintext
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.
      void GLScene::display(){
        float col[] = {1.0, 0.0, 0.0, 1.0};
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        for(int i=0; i<GLScene::objects_num; i++){
          if (GLScene::objects[i][0].show){
            glPushMatrix();
            glMaterialfv(GL_FRONT, GL_SPECULAR, col);
            glMaterialf(GL_FRONT, GL_SHININESS, 1.0);
            //glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, col);
            float gip = sqrt(pow(GLScene::objects[i][0].up.x, 2)
                            +pow(GLScene::objects[i][0].up.y, 2)
                            +pow(GLScene::objects[i][0].up.z, 2));
            glTranslatef(
              -GLScene::objects[i][0].position.x,
              -GLScene::objects[i][0].position.y,
              -GLScene::objects[i][0].position.z
            );
            glRotatef(-asin(GLScene::objects[i][0].up.x/gip)*180/3.14159, 0.0, 0.0, 1.0);
            glRotatef(-asin(GLScene::objects[i][0].up.z/gip)*180/3.14159, 1.0, 0.0, 0.0);
            if (GLScene::objects[i][0].angle>0.0){
            glRotatef(
              GLScene::objects[i][0].angle,
              0.0,
              1.0,
              0.0
            );
            }
            glVertexPointer(3, GL_FLOAT, 0, GLScene::objects[i][0].vertex);
            glDrawArrays(GL_TRIANGLES, 0, GLScene::objects[i][0].vertex_num);
            glPopMatrix();
          }
        };

        glFlush();
        glutSwapBuffers();
      }



То есть выбираю материал (непрозрачный, с красным отражением), произвожу разные смещения, повороты, потом рисую загруженные из файла объекты...

кстати, вот инициализация:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
      void GLScene::init(int* argc, char** argv, GLPoint left_bottom_near, GLPoint right_top_far){
        GLScene::objects_num = 0;
        GLScene::objects = new GLObject*[100000];

        GLScene::materials = new GLMaterial*[100000];

        glutInit(argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
        glutInitWindowSize(500,500);
        glutCreateWindow("simple");
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glFrustum(left_bottom_near.x, right_top_far.x, left_bottom_near.y, right_top_far.y, left_bottom_near.z, right_top_far.z);
        glutDisplayFunc(GLScene::display);
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnable(GL_LIGHTING);

        int position[3] = {3000, 0.0, 0.0};

        glEnable(GL_LIGHT0);
        //glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0.9);
        glLightiv(GL_LIGHT0, GL_POSITION, position);
      }



то есть всё в режиме rgba, как и положено... Но при этом параметр прозрачности никак не учитывается и всё остаётся полупрозрачным. Что я не так написал или пропустил (просто пишу по статьям пока разбираюсь, может там чего забыли написать, или я недопонял)?
...
Рейтинг: 0 / 0
Материалы в openGL
    #38445822
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что ж :) Сам и отвечу на свой вопрос... Вдруг кто с тем же столкнётся...

Дело было в том, что я забыл об одной единственной вещичке (в статьях, по которым я учусь её упустили)... Мне удалось вспомнить, что ранее я сталкивался с проблемой неправильной последовательности прорисовки граней. В общем тут было то же, просто эффект такой создавался, будто грани просвещаются... добавил glEnable(GL_DEPTH_TEST) и всё заработало как надо
...
Рейтинг: 0 / 0
Материалы в openGL
    #38445995
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну брат... это замечательно. Сам спросил. Сам ответил
...
Рейтинг: 0 / 0
Материалы в openGL
    #38447537
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу брат... это замечательно. Сам спросил. Сам ответил
А выбора то нету :) Если бы кто ответил хотя бы... а так... никто не отвечает, а научиться то хочется... вот и приходится самому разбираться по пол дня :)
...
Рейтинг: 0 / 0
Материалы в openGL
    #38447641
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрникто не отвечает, а научиться то хочется... вот и приходится самому разбираться по пол дня :)труъ вэй ))
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Материалы в openGL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]