|
[x]
The Solution Rating System
|
|
| With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating. - The Grade of the Solution
- The Zone Rank of the Expert Providing the Solution
- The Number of Author and Expert Comments
- The Number of Experts Contributing
- The Feedback of the Community
Your Input Matters Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site. If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
|
|
|
|
Tags:
opengl, bezier, curve
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,(GLfloat)Width/(GLfloat)Height,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_BIT | 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].ypos+=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_RGB | GLUT_DOUBLE);
glutInitWindowSize (800, 600);
glutCreateWindow (argv[0]);
glutReshapeFunc (reshape);
glutDisplayFunc (DrawGLScene);
glutIdleFunc (idle_func);
glutMainLoop();
return 0;
}
//end of code
| Answered By: |
sunnycoder |
| Expert Since: |
05/06/2003 |
| Accepted Solutions: |
4523 |
| Computer Expertise: |
Beginner |
sunnycoder has been an Expert for 5 years 8 months, during which he has posted 17810 comments
and answered 4523 questions. sunnycoder is just one of 71 experts in the OpenGL Graphics & Game Programming Zone.
2 experts collaborated on this answer, which was graded an "A" by the asker.