eye30
asked on
C++/Opengl: Object Oriented Bezier Curves
Hi, I'm relatively new to OOP/C++/Opengl. Thanks in advance.
I want to create multiple Bezier curves in a OOP class structure. Eventually I would like to create multiple bezier curves with different attributes like x, y position, line thickness, etc.
I'm having difficulty with pointer/array portion. I want to create an array of 100 bezier curves. These individual curves are set up in an 6x3 array. I'm getting 2 errors.
My code:
#include <windows.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
//function prototypes
//Define bezier class for animation
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
BezierClass() {
float bezierArray[6][3] =
{ {x1, y1, 0.0}, /* 1st End Point */
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */;
}
};
/* Create an array of type bezierClass that may hold 100 beziers */
BezierClass bezierArray[100];
int beziernum=0;
int totalbezier=5;
float zoom = -7;
void InitGL(int Width, int Height)
{
glClearDepth(1.0);
glClearColor(0.0, 0.0, 0.0, 0.0); /* bg color = black */
glDepthFunc(GL_LESS); /* nearer appears nearer */
glEnable(GL_DEPTH_TEST); /* enable depth testing */
glShadeModel(GL_SMOOTH); /* shade colors smooth */
glMatrixMode(GL_PROJECTION ); /* switch the matrix */
glLoadIdentity(); /* reset the cur. matrix */
gluPerspective(45.0f,(GLfl oat)Width/ (GLfloat)H eight,0.1f ,100.0f);
glMatrixMode(GL_MODELVIEW) ; /* switch matrix back */
}
void DrawGLScene(void)
{
int i; /* temp var */
/* Clear the screen and the buffers */
glClear(GL_COLOR_BUFFER_BI T | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); /* reset cur. matrix */
glTranslatef(0.0f, 0.0f, -10.0f); /* move the cam */
/* ok, this is the main point of our bezier curve
* void glMap1f(GLenum target, float u1, float u2, int stride
* int order, const float *points);
* target is one of these:
* GL_MAP1_VERTEX_3 (Vertex Coordinates (xyz))
* GL_MAP1_VERTEX_4 (Vertex Coordinates (xyzw))
* GL_MAP1_INDEX (Color Index)
* GL_MAP1_COLOR_4 (Color Values (rgba))
* GL_MAP1_NORMAL (Normal Coordinates)
* GL_MAP1_TEXTURE_COORD_1/2/ 3/4 (Texture Coordinates(s/st/str/strq)
*
* no idea what u1 and u2 these are, but it works with 0.0 and 1.0
* stride is the distance between each point on the curve
* order should always just fit the number of the points
* points is just a pointer to the pointdata(array)*/
////********error here: says "pointer/array required"//////////////
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 6, &bezierArray[0][0]);
glEnable(GL_MAP1_VERTEX_3) ; /* enable the mode */
glColor3f(1.0, 1.0, 1.0); /* set color to white */
glBegin(GL_LINE_STRIP); /* start drawing */
for(i = 0; i <= 60; i++)
{
/* start evaluating the points
* void glEvalCoord1f(float u);
* u is the current point we evaluate */
glEvalCoord1f((float)i/60. 0f);
}
glEnd(); /* stop drawing */
glPointSize(3.0); /* set point size to 3px */
glColor3f(1.0f, 1.0f, 0.0f); /* set color to yellow */
glBegin(GL_POINTS); /* start drawing again */
for(i = 0; i < 6; i++)
{
/* draw all control/end points */
////********error here: says "pointer/array required"//////////////
glVertex3fv(&bezierArray[i ][0]);
}
glEnd();
glFlush(); /* Flush all buffers */
glutSwapBuffers(); /* Sawp buffers */
return;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLint) w, (GLint) h);
glMatrixMode(GL_PROJECTION );
glLoadIdentity();
if ( h==0)
gluPerspective(45, (GLdouble)w, 1.0, 100.0);
else
gluPerspective(45, (GLdouble)w/(GLdouble)h,1. 0, 100.0);
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity();
}
//test-trying to make the bezier curve move in y direction.
void idle_func (void)
{
for (beziernum=0 ;beziernum < 100; beziernum++) {
//bezierArray[beziernum].y pos+=1;
}
glutPostRedisplay();
}
/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, and handle input events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_R GB | GLUT_DOUBLE);
glutInitWindowSize (800, 600);
glutCreateWindow (argv[0]);
glutReshapeFunc (reshape);
glutDisplayFunc (DrawGLScene);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
//end of code
I want to create multiple Bezier curves in a OOP class structure. Eventually I would like to create multiple bezier curves with different attributes like x, y position, line thickness, etc.
I'm having difficulty with pointer/array portion. I want to create an array of 100 bezier curves. These individual curves are set up in an 6x3 array. I'm getting 2 errors.
My code:
#include <windows.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
//function prototypes
//Define bezier class for animation
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
BezierClass() {
float bezierArray[6][3] =
{ {x1, y1, 0.0}, /* 1st End Point */
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */;
}
};
/* Create an array of type bezierClass that may hold 100 beziers */
BezierClass bezierArray[100];
int beziernum=0;
int totalbezier=5;
float zoom = -7;
void InitGL(int Width, int Height)
{
glClearDepth(1.0);
glClearColor(0.0, 0.0, 0.0, 0.0); /* bg color = black */
glDepthFunc(GL_LESS); /* nearer appears nearer */
glEnable(GL_DEPTH_TEST); /* enable depth testing */
glShadeModel(GL_SMOOTH); /* shade colors smooth */
glMatrixMode(GL_PROJECTION
glLoadIdentity(); /* reset the cur. matrix */
gluPerspective(45.0f,(GLfl
glMatrixMode(GL_MODELVIEW)
}
void DrawGLScene(void)
{
int i; /* temp var */
/* Clear the screen and the buffers */
glClear(GL_COLOR_BUFFER_BI
glLoadIdentity(); /* reset cur. matrix */
glTranslatef(0.0f, 0.0f, -10.0f); /* move the cam */
/* ok, this is the main point of our bezier curve
* void glMap1f(GLenum target, float u1, float u2, int stride
* int order, const float *points);
* target is one of these:
* GL_MAP1_VERTEX_3 (Vertex Coordinates (xyz))
* GL_MAP1_VERTEX_4 (Vertex Coordinates (xyzw))
* GL_MAP1_INDEX (Color Index)
* GL_MAP1_COLOR_4 (Color Values (rgba))
* GL_MAP1_NORMAL (Normal Coordinates)
* GL_MAP1_TEXTURE_COORD_1/2/
*
* no idea what u1 and u2 these are, but it works with 0.0 and 1.0
* stride is the distance between each point on the curve
* order should always just fit the number of the points
* points is just a pointer to the pointdata(array)*/
////********error here: says "pointer/array required"//////////////
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 6, &bezierArray[0][0]);
glEnable(GL_MAP1_VERTEX_3)
glColor3f(1.0, 1.0, 1.0); /* set color to white */
glBegin(GL_LINE_STRIP); /* start drawing */
for(i = 0; i <= 60; i++)
{
/* start evaluating the points
* void glEvalCoord1f(float u);
* u is the current point we evaluate */
glEvalCoord1f((float)i/60.
}
glEnd(); /* stop drawing */
glPointSize(3.0); /* set point size to 3px */
glColor3f(1.0f, 1.0f, 0.0f); /* set color to yellow */
glBegin(GL_POINTS); /* start drawing again */
for(i = 0; i < 6; i++)
{
/* draw all control/end points */
////********error here: says "pointer/array required"//////////////
glVertex3fv(&bezierArray[i
}
glEnd();
glFlush(); /* Flush all buffers */
glutSwapBuffers(); /* Sawp buffers */
return;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLint) w, (GLint) h);
glMatrixMode(GL_PROJECTION
glLoadIdentity();
if ( h==0)
gluPerspective(45, (GLdouble)w, 1.0, 100.0);
else
gluPerspective(45, (GLdouble)w/(GLdouble)h,1.
glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
}
//test-trying to make the bezier curve move in y direction.
void idle_func (void)
{
for (beziernum=0 ;beziernum < 100; beziernum++) {
//bezierArray[beziernum].y
}
glutPostRedisplay();
}
/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, and handle input events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_R
glutInitWindowSize (800, 600);
glutCreateWindow (argv[0]);
glutReshapeFunc (reshape);
glutDisplayFunc (DrawGLScene);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
//end of code
ASKER
I tried the cast as you suggested, still spits out 3 errors. I wrote the errors in the previous code. I'll rewrite them here to make them clearer and more obvious. Thanks again.
#include <windows.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
float bezierArray[6][3];
BezierClass() {
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
bezierArray[6][3]={ {x1, y1, 0.0}, ********error here:Expression syntax error****
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */
}
};
/* Create an array of type bezierClass that may hold 100 beziers */
BezierClass bezier[100];
int beziernum=0;
int totalbezier=5;
float zoom = -7;
void InitGL(int Width, int Height)
{
glClearDepth(1.0);
glClearColor(0.0, 0.0, 0.0, 0.0); /* bg color = black */
glDepthFunc(GL_LESS); /* nearer appears nearer */
glEnable(GL_DEPTH_TEST); /* enable depth testing */
glShadeModel(GL_SMOOTH); /* shade colors smooth */
glMatrixMode(GL_PROJECTION ); /* switch the matrix */
glLoadIdentity(); /* reset the cur. matrix */
gluPerspective(45.0f,(GLfl oat)Width/ (GLfloat)H eight,0.1f ,100.0f);
glMatrixMode(GL_MODELVIEW) ; /* switch matrix back */
}
void DrawGLScene(void)
{
int i; /* temp var */
/* Clear the screen and the buffers */
glClear(GL_COLOR_BUFFER_BI T | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); /* reset cur. matrix */
glTranslatef(0.0f, 0.0f, -10.0f); /* move the cam */
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 6, (GLfloat*) bezier[0].bezierArray[1][0 ]); ********error here********
(Error: Illegal explicit conversion from 'float' to 'float*')
glEnable(GL_MAP1_VERTEX_3) ; /* enable the mode */
glColor3f(1.0, 1.0, 1.0); /* set color to white */
glBegin(GL_LINE_STRIP); /* start drawing */
for(i = 0; i <= 60; i++)
{
glEvalCoord1f((float)i/60. 0f);
}
glEnd(); /* stop drawing */
glPointSize(3.0); /* set point size to 3px */
glColor3f(1.0f, 1.0f, 0.0f); /* set color to yellow */
glBegin(GL_POINTS); /* start drawing again */
for(i = 0; i < 6; i++)
{
/* draw all control/end points */
glVertex3fv((GLfloat*)bezi er[0].bezi erArray[i] [0]);***** ***error here********
(Error: Illegal explicit conversion from 'float' to 'float*')
}
glEnd();
glFlush(); /* Flush all buffers */
glutSwapBuffers(); /* Sawp buffers */
return;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLint) w, (GLint) h);
glMatrixMode(GL_PROJECTION );
glLoadIdentity();
if ( h==0)
gluPerspective(45, (GLdouble)w, 1.0, 100.0);
else
gluPerspective(45, (GLdouble)w/(GLdouble)h,1. 0, 100.0);
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity();
}
void idle_func (void)
{
for (beziernum=0 ;beziernum < 100; beziernum++) {
//bezierArray[beziernum].y pos+=1;
}
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_R GB | GLUT_DOUBLE);
glutInitWindowSize (800, 600);
glutCreateWindow (argv[0]);
glutReshapeFunc (reshape);
glutDisplayFunc (DrawGLScene);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
#include <windows.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream.h>
#include <time.h>
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
float bezierArray[6][3];
BezierClass() {
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
bezierArray[6][3]={ {x1, y1, 0.0}, ********error here:Expression syntax error****
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */
}
};
/* Create an array of type bezierClass that may hold 100 beziers */
BezierClass bezier[100];
int beziernum=0;
int totalbezier=5;
float zoom = -7;
void InitGL(int Width, int Height)
{
glClearDepth(1.0);
glClearColor(0.0, 0.0, 0.0, 0.0); /* bg color = black */
glDepthFunc(GL_LESS); /* nearer appears nearer */
glEnable(GL_DEPTH_TEST); /* enable depth testing */
glShadeModel(GL_SMOOTH); /* shade colors smooth */
glMatrixMode(GL_PROJECTION
glLoadIdentity(); /* reset the cur. matrix */
gluPerspective(45.0f,(GLfl
glMatrixMode(GL_MODELVIEW)
}
void DrawGLScene(void)
{
int i; /* temp var */
/* Clear the screen and the buffers */
glClear(GL_COLOR_BUFFER_BI
glLoadIdentity(); /* reset cur. matrix */
glTranslatef(0.0f, 0.0f, -10.0f); /* move the cam */
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 6, (GLfloat*) bezier[0].bezierArray[1][0
(Error: Illegal explicit conversion from 'float' to 'float*')
glEnable(GL_MAP1_VERTEX_3)
glColor3f(1.0, 1.0, 1.0); /* set color to white */
glBegin(GL_LINE_STRIP); /* start drawing */
for(i = 0; i <= 60; i++)
{
glEvalCoord1f((float)i/60.
}
glEnd(); /* stop drawing */
glPointSize(3.0); /* set point size to 3px */
glColor3f(1.0f, 1.0f, 0.0f); /* set color to yellow */
glBegin(GL_POINTS); /* start drawing again */
for(i = 0; i < 6; i++)
{
/* draw all control/end points */
glVertex3fv((GLfloat*)bezi
(Error: Illegal explicit conversion from 'float' to 'float*')
}
glEnd();
glFlush(); /* Flush all buffers */
glutSwapBuffers(); /* Sawp buffers */
return;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLint) w, (GLint) h);
glMatrixMode(GL_PROJECTION
glLoadIdentity();
if ( h==0)
gluPerspective(45, (GLdouble)w, 1.0, 100.0);
else
gluPerspective(45, (GLdouble)w/(GLdouble)h,1.
glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
}
void idle_func (void)
{
for (beziernum=0 ;beziernum < 100; beziernum++) {
//bezierArray[beziernum].y
}
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_R
glutInitWindowSize (800, 600);
glutCreateWindow (argv[0]);
glutReshapeFunc (reshape);
glutDisplayFunc (DrawGLScene);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
just checked your class definition
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
BezierClass() {
float bezierArray[6][3] =
{ {x1, y1, 0.0}, /* 1st End Point */
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */;
}
};
bezierArray is not a member of your class ... rather it is a local variable for the constructor ... perhaps you would like to include it as a class member and initialize it in the constructor ...
class BezierClass {
public:
float x1,y1;
float x2,y2;
float x_cp1,y_cp1;
float x_cp2,y_cp2;
float x_cp3,y_cp3;
float x_cp4,y_cp4;
float xpos,ypos;
BezierClass() {
float bezierArray[6][3] =
{ {x1, y1, 0.0}, /* 1st End Point */
{x_cp1, y_cp1, 0.0}, /* 1st Control P. */
{x_cp2, y_cp2, 0.0}, /* 2nd Control P. */
{x_cp3, y_cp3, 0.0}, /* 3rd Control P. */
{x_cp4, y_cp4, 0.0}, /* 3th Control P. */
{x2, y2, 0.0} }; /* 2nd End Point */;
}
};
bezierArray is not a member of your class ... rather it is a local variable for the constructor ... perhaps you would like to include it as a class member and initialize it in the constructor ...
Error Free Solid Code
#include "stdafx.h"
/* bezcurve.c
* This program uses evaluators to draw a Bezier curve.
*/
#include <stdlib.h>
#include <GL/glut.h>
GLfloat ctrlpoints[4][3] = {
{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0},
{2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}};
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3) ;
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BI T);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat) i/30.0);
glEnd();
/* The following code displays the control points as dots. */
glPointSize(5.0);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for (i = 0; i < 4; i++)
glVertex3fv(&ctrlpoints[i] [0]);
glEnd();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION );
glLoadIdentity();
if (w <= h)
glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w ,
5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0);
else
glOrtho(-5.0*(GLfloat)w/(G Lfloat)h,
5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0);
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity();
}
/* ARGSUSED1 */
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
Cheers,
Tsiu
#include "stdafx.h"
/* bezcurve.c
* This program uses evaluators to draw a Bezier curve.
*/
#include <stdlib.h>
#include <GL/glut.h>
GLfloat ctrlpoints[4][3] = {
{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0},
{2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}};
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
glEnable(GL_MAP1_VERTEX_3)
}
void display(void)
{
int i;
glClear(GL_COLOR_BUFFER_BI
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat) i/30.0);
glEnd();
/* The following code displays the control points as dots. */
glPointSize(5.0);
glColor3f(1.0, 1.0, 0.0);
glBegin(GL_POINTS);
for (i = 0; i < 4; i++)
glVertex3fv(&ctrlpoints[i]
glEnd();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION
glLoadIdentity();
if (w <= h)
glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w
5.0*(GLfloat)h/(GLfloat)w,
else
glOrtho(-5.0*(GLfloat)w/(G
5.0*(GLfloat)w/(GLfloat)h,
glMatrixMode(GL_MODELVIEW)
glLoadIdentity();
}
/* ARGSUSED1 */
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc (keyboard);
glutMainLoop();
return 0;
}
Cheers,
Tsiu
from the man page::::
points is the location of the first control point, which occupies one, two, three, or four contiguous memory locations, depending on which map is being defined.
so you really should be passing &bezierArray[1][0] ... but anyway, it should not have complained as the data types look right ...
try casting to GLfloat *
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 6, (GLfloat *)&bezierArray[0][0]);
If that does not work, tell us the following:
what is the platform? ... also what is the exact error message (along with the error number)