Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > FAQ > Библиотека описаний > OpenGL
Перезагрузить страницу Построение октаэдра (OpenGL)
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
NadejdaX NadejdaX вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2017
По умолчанию Построение октаэдра (OpenGL) - 03.04.2017, 00:33

По заданию необходимо разработать OpenGL-приложение, визуализирующее октаэдр. Помогите, пожалуйста, разобраться, где допущена ошибка и почему не идет построение?

cpp Код:
#include "stdafx.h"
#include <GL/glut.h>

int R = 1; // радиус

// Нумерация элементов массивов vertices (присвоение вершинам номера от 0 до 7) и colors. Составляем из вершин треугольники - грани (а1, а2, а3, а4, а5, а6, а7, а8)
GLubyte a1[] = { 0, 1, 2 };
GLubyte a2[] = { 1, 3, 2 };
GLubyte a3[] = { 0, 4, 1 };
GLubyte a4[] = { 1, 4, 3 };
GLubyte a5[] = { 0, 5, 2 };
GLubyte a6[] = { 2, 5, 3 };
GLubyte a7[] = { 0, 5, 4 };
GLubyte a8[] = { 5, 4, 3 };

void setupPointers(void)
{   //координаты вершин октаэдра; по 3 координаты для каждой вершины
    static GLint vertices[] = { -R, 0, 0,
        0, 0, R,
        0, R, 0,
        R, 0, 0,
        0, -R, 0,
        0, 0, -R };

    static GLfloat colors[] = { 1.0, 0.2, 0.2,
        0.2, 0.2, 1.0,
        0.8, 1.0, 0.2,
        0.75, 0.75, 0.75,
        0.35, 0.35, 0.35,
        0.5, 0.5, 0.5   };
    //включение массивов вершины и цвета
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    //указываем размер этих массивов (сколько элементов будет прочитано за один проход)
    glVertexPointer(3, GL_INT, 0, vertices); //3 - потому что 3 координаты для каждой вершины
    glColorPointer(3, GL_FLOAT, 0, colors);
}

void display(void)
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(20.0, 20.0, -60.0);
    //8 вызовов по числу граней (пронумерованы выше)
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a1);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a2);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a3);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a4);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a5);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a6);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a7);
    glDrawElements(GL_QUADS, 3, GL_UNSIGNED_BYTE, a8);
    glFlush();
}

void reshape(int w, int h)
{
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(120, (GLdouble)w / h, 1.0, 100.0);//насколько широко открыто око камеры (120 градусов)
    glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(350, 350);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);
    setupPointers();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return 0;
}
Миниатюры
ieoayaedh.jpg  
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,274
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 05.04.2017, 10:22

1) Вы пытаетесь рисовать квадраты (GL_QUADS), а ведь нужно треугольники (GL_TRIANGLES или же, если только контур, то GL_LINE_LOOP)

2) Мелковато получается, нужно укрупнить порядка на полтора-два: или R сделать побольше, или в районе glTranlatef добавить еще и glScalef
Ответить с цитированием
Ads
Ответ
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение MahovIV С/С++ 0 01.01.2014 20:46
Функция рассеяния точки (airy-function) в OpenGL, построение кадра в ИК-диапазоне. Nikitun OpenGL 0 06.11.2011 22:26
построение прямоугольника mulya Lisp 4 10.06.2011 20:03
Построение графиков LoneDreamer Pascal 1 02.03.2011 03:42
построение графика npr2 Delphi 7 22.12.2009 13:55
Построение графики на С++ Gerda&amp;Kai Вопросы начинающих программистов 1 02.11.2009 01:26
Построение прямой y=ax+b. toshkaexe C++ Builder 6 08.02.2007 20:22
Построение 3D графика imported_Neko C++ Builder 2 26.03.2006 03:14
Как сделать построение деревьев mbait С/С++ 1 14.05.2005 05:24
Построение графика в VC++ imported_Pirate Visual C++ 1 22.07.2004 14:39
Построение проекций 3D lyubic Программирование графики 0 04.05.2004 21:58
Построение дерева 2 S.Yu.Gubanov Алгоритмы 3 09.12.2002 15:43



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов