Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу нарисовать кривую Безье? 
:(
    Опции темы
maxi2
Дата 13.6.2014, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.5.2012

Репутация: нет
Всего: 1



Вот этот код компилируется и рисует кривую. Но мне надо нарисовать по тех точках что закоментированы и их 6 а не 4. Ничего не видно после компиляции и запуска. В чем дело? Окно просто не захватывает (rezize, Viewport) эту кривую или надо что то менять в параметрах? Здесь непонятен один момент--здесь сегментов 20, а как они определяются?
Как и glEvalCoord1d()--если дело в ней здесь?


Код
#include <iostream>
#include <stdlib.h>
#include "windows.h"
#include <GL/glut.h> // GLUT stuff - includes OpenGL headers

// For Bezier curve
const int numcontrolpts = 4;  // Number of control points --nado mne 6
                              // Below are coord's of control points
                             // (Must use 3 coord's each, even in 2-D.)
GLfloat controlpts[numcontrolpts][3] = {
   {-0.9, -0.9,  0.0},
   {-0.5,  0.2,  0.0},
   { 0.9, -0.9,  0.0},
   { 0.9,  0.9,  0.0}
};

//const int numcontrolpts = 6; 
//{
  // {3, 11,  0.0},
   //{7,  16,  0.0},
  // { 4, 7,  0.0},
  // { 13,  14,  0.0},
   // { 6,  3,  0.0},
   //  { 11,  1,  0.0}
//};

int numdrawsegs = 20;         // Number of segments drawn in the Bezier curve

const int startwinsize = 400; // Starting window width & height, in pixels


// The GLUT display function
void display()
{
   // Clear screen
   glClear(GL_COLOR_BUFFER_BIT);

   // Draw Bezier curve
   glColor3d(0.9, 0.1, 0.1);
   glLineWidth(3.0);

   glEvalMesh1(GL_LINE, 0, numdrawsegs);

   // Here, We used an evaluator grid.
   // Code to do the same thing, "manually", is as follows:

   //glBegin(GL_LINE_STRIP);
   //   for (int i=0; i<=numdrawsegs; ++i)
   //      glEvalCoord1d(GLdouble(i)/numdrawsegs);
   //glEnd();

   glutSwapBuffers();
}


// The GLUT reshape function
void reshape(int w, int h)
{
   glViewport(0, 0, w, h);

   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   // We set up coordinate system so that aspect ratios are always correct,
   //  and the region from -1..1 in x & y always just fits in the viewport.
   if (w > h)
   {
      gluOrtho2D(-double(w)/h, double(w)/h, -1., 1.);
   }
   else
   {
      gluOrtho2D( -1., 1., -double(h)/w, double(h)/w);
   }

   glMatrixMode(GL_MODELVIEW);  // Always go back to modelview mode
   glLoadIdentity();
}


// The GLUT keyboard function
void keyboard(unsigned char key, int x, int y)
{
   switch (key)
   {
   case 27:  // Escape Key -- good way to quit
      exit(0);  // Quit
      break;
   }
}


// Initializes GL states
void init()
{
   // Set background color
   glClearColor(1.0, 1.0, 1.0, 0.0);

   // Set up Bezier curve evaluator
   glMap1f(GL_MAP1_VERTEX_3,   // target: 1-d [curve], 3 coord's per pt
           0.0, 1.0,           // start & end param value
           3,                  // "stride": pts stored 3 GLfloat's apart
           numcontrolpts,      // no. of control points
           &controlpts[0][0]); // control pt data
   glEnable(GL_MAP1_VERTEX_3); // Enable this evaluator

   // Set up grid for evaluator.
   // This only needs to be done when using glEvalMesh1.
   glMapGrid1d(numdrawsegs, 0.0, 1.0);
}


int main(int argc, char ** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
   glutInitWindowSize(startwinsize, startwinsize);
   glutInitWindowPosition(50, 50);
   glutCreateWindow("CS 381 - Simple OpenGL Evaluator Demo");

   init();
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);


   glutMainLoop();

   return 0;
}


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 19.6.2014, 12:27
PM MAIL   Вверх
baldina
Дата 13.6.2014, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



Цитата(maxi2 @  13.6.2014,  12:56 Найти цитируемый пост)
здесь сегментов 20, а как они определяются

автоматически. это число шагов параметра в диапазоне [0;1] (точнее -  start & end param value)

Цитата(maxi2 @  13.6.2014,  12:56 Найти цитируемый пост)
gluOrtho2D( -1., 1., -double(h)/w, double(h)/w);

и кривая оказывается за пределами окна
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.