Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 30.05.2020
Сообщений: 2
1

C++, правильное отображение чайника (glutSolidTeapot)

30.05.2020, 18:25. Показов 2882. Ответов 3

Author24 — интернет-сервис помощи студентам
Мне требуется просто нарисовать чайник в OpenGL с нормальным освещением и всё такое. С освещением я разберусь, но вот что с самим чайником происходит я не знаю. Или всё-таки дело в освещении? Чего только ни пробовал, как только не гуглил. Вот что у меня получается:
C++, правильное отображение чайника (glutSolidTeapot)


Вот, что примерно нужно:
Название: example.png
Просмотров: 88

Размер: 16.0 Кб

Прошу помочь разобраться. Заранее спасибо!

Мой код:
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
#include <windows.h>
#include <glut.h>   
#include <math.h>
 
void Initialize()
{
    glClearColor(1, 1, 1, 0.0);
}
 
void Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluLookAt(0.4, 0.7, 0.5, 0.5, 0.5, 0, 0, 1, 0);
 
    glMatrixMode(GL_MODELVIEW);
    glTranslated(0.5, 0.5, 0);
    glRotated(30, 0, 1, 0);
 
    glShadeModel(GL_SMOOTH);
    glColor3f(0.502, 0.502, 0.502);
 
    GLfloat pos_light[4] = { 0.5,0.5,0,0 };
 
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glLightfv(GL_LIGHT0, GL_POSITION, pos_light);
 
    glEnable(GL_CULL_FACE);
 
    glFrontFace(GL_CW);
    glutSolidTeapot(0.5);
 
    glFlush();
}
 
 
 
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(400, 400);       
    glutInitWindowPosition(100, 100);   
    glutCreateWindow("Machnov");
    Initialize();                       
    glutDisplayFunc(Draw);              
    glutMainLoop();
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2020, 18:25
Ответы с готовыми решениями:

Правильное отображение BMP C++
Начал изучение книги Андре Ламот ПРОГРАММИРОВАНИЕ ИГР ДЛЯ WINDOWS СОВЕТЫ ПРОФЕССИОНАЛА; , для...

Правильное отображение
Уважаемые css-ники! помогите с правильным отображением двух мест рисунками: &lt;!DOCTYPE html...

Не правильное отображение
столкнулся с проблемой ВОТ ТАК СКИН РАБОТАЕТ! А ВОТ ТАК НЕТ

Правильное отображение кириллицы
Привет всем ! Вот фрагмент декодирования (сам фрагмент чтения файла не привожу он не нужен) ...

3
Модератор
Эксперт Java
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,332
30.05.2020, 18:36 2
Выглядит как вывернутый наизнанку, то есть нормали смотрят не туда, то есть повернуты на 180 градусов. Замените строчку glFrontFace(GL_CW); точнее параметр на другой возможный, добуквенно не помню но вроде GL_CCW
1
0 / 0 / 0
Регистрация: 30.05.2020
Сообщений: 2
30.05.2020, 19:23  [ТС] 3
Пробовал и glFrontFace(GL_CCW), к сожалению, лучше не становится
C++, правильное отображение чайника (glutSolidTeapot)
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
30.05.2020, 19:27 4
Лучший ответ Сообщение было отмечено Machnov как решение

Решение

Цитата Сообщение от Machnov Посмотреть сообщение
Или всё-таки дело в освещении?
на первой картинке нету буфера глубины поэтому рисуеться как ресуеться, вот пример с освещением и фигурами:

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
 
#include <stdlib.h>
 
static int slices = 16;
static int stacks = 16;
 
/* GLUT callback Handlers */
 
static void resize(int width, int height)
{
    const float ar = (float) width / (float) height;
 
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity() ;
}
 
static void display(void)
{
    const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
    const double a = t*90.0;
 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3d(1,0,0);
 
 
    glPushMatrix();
        glTranslated(-2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidTeapot(0.5);
    glPopMatrix();
 
 
    /*glPushMatrix();
        glTranslated(-2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidSphere(1,slices,stacks);
    glPopMatrix();*/
 
    glPushMatrix();
        glTranslated(0,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidCone(1,1,slices,stacks);
    glPopMatrix();
 
    glPushMatrix();
        glTranslated(2.4,1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutSolidTorus(0.2,0.8,slices,stacks);
    glPopMatrix();
 
 
 
 
    glPushMatrix();
         glTranslated(-2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireTeapot(0.5);
    glPopMatrix();
    /*glPushMatrix();
        glTranslated(-2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireSphere(1,slices,stacks);
    glPopMatrix();*/
 
    glPushMatrix();
        glTranslated(0,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireCone(1,1,slices,stacks);
    glPopMatrix();
 
    glPushMatrix();
        glTranslated(2.4,-1.2,-6);
        glRotated(60,1,0,0);
        glRotated(a,0,0,1);
        glutWireTorus(0.2,0.8,slices,stacks);
    glPopMatrix();
 
    glutSwapBuffers();
}
 
 
static void key(unsigned char key, int x, int y)
{
    switch (key)
    {
        case 27 :
        case 'q':
            exit(0);
            break;
 
        case '+':
            slices++;
            stacks++;
            break;
 
        case '-':
            if (slices>3 && stacks>3)
            {
                slices--;
                stacks--;
            }
            break;
    }
 
    glutPostRedisplay();
}
 
static void idle(void)
{
    glutPostRedisplay();
}
 
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
 
const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
 
/* Program entry point */
 
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
 
    glutCreateWindow("GLUT Shapes");
 
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);
 
    glClearColor(1,1,1,1);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
 
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
 
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
 
    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);
 
    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
 
    glutMainLoop();
 
    return EXIT_SUCCESS;
}
Миниатюры
C++, правильное отображение чайника (glutSolidTeapot)  
1
30.05.2020, 19:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2020, 19:27
Помогаю со студенческими работами здесь

Не правильное отображение в mozilla
Сайт: fiveapril.ru Работал все хорошо во всех браузерах. Сейчас значит такая проблема....

Правильное отображение стиля
есть код : &lt;?php require_once 'admin/connect.php'; ?&gt; &lt;? $sql = mysql_query(...

Не правильное отображение дуг
Задаю граф, через матрицу смежности. Когда задаю малое количество дуг то выходит, что на картинке....

Не правильное отображение сигнала wi-fi
Не правильно отображается сигнал Wi-Fi в панели значков справа. Windows 10 ltsb 2016 64 bit. При...

Правильное отображение - кроссбраузерность
проблема в том что сайт открывается только в IE

Не правильное отображение в Gauge
Здравствуйте! Я применяю такую процедуру на кнопке var a,b: real; sum: real; begin...


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

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