gpt4 book ai didi

c++ - 在 OpenGL 太阳系中创建星星

转载 作者:行者123 更新时间:2023-11-30 05:43:16 24 4
gpt4 key购买 nike

我正在用 OpenGL C++ 创建一个太阳系,其中地球围绕太阳旋转。

我现在面临的唯一问题是无法在窗口上方创建星星我尝试了一切但没有帮助

现在我已经从这里删除了一些额外的代码,我希望它对你们有用,因为这些功能不是必需的,也不需要进行任何更改

                 #include "Solar.h"
#include <stdlib.h>
#include <glut.h>
static GLenum spinMode = GL_TRUE;
static GLenum singleStep = GL_FALSE;

static float HourOfDay = 0.0;
static float DayOfYear = 0.0;

static float AnimateIncrement = 2.0;

void Haxxan()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glColor3f(0.1,0.3,0.9);
glVertex2f(-0.9,0.5);
glVertex2f(-0.9,0.0);

glVertex2f(-0.9,0.25);
glVertex2f(-0.7,0.25);
glEnd();
glFlush();
}


/*
* Animate() handles the animation and the redrawing of the
* graphics window contents.
*/
static void Animate(void)
{
// Clear the redering window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Now Make stars Using the Vertex
//glBegin(GL_LINES);
//glColor3f(0.1,0.3,0.9);

/*glVertex2f(-0.9,0.5);
glVertex2f(-0.9,0.0);

glVertex2f(-0.9,0.25);
glVertex2f(-0.7,0.25);
*/
if (spinMode) {
// Update the animation state
HourOfDay += AnimateIncrement;
DayOfYear += AnimateIncrement/40.0;

HourOfDay = HourOfDay - ((int)(HourOfDay/24))*24;
DayOfYear = DayOfYear - ((int)(DayOfYear/365))*365;
}

// Clear the current matrix (Modelview)
glLoadIdentity();

// Back off eight units to be able to view from the origin.
glTranslatef ( 0.0, 0.0, -8.0 );

// Rotate the plane of the elliptic
// (rotate the model's plane about the x axis by fifteen degrees)
glRotatef( 15.0, 1.0, 0.0, 0.0 );

// Draw the sun -- as a yellow, wireframe sphere
glColor3f( 1.0, 1.0, 0.0 );
glutWireSphere( 1.0, 15, 15 );
// Now Draw Stars
glColor3f(0.0,0.0,1.0);
//glutWireSphere( 0.3, 18, 9 );
//glLineStipple(0.1,0.1);
glVertex2f(0.9,0.3);
glVertex2f(0.6,0.3);

//end stars
// Draw the Earth
// First position it around the sun
// Use DayOfYear to determine its position
glRotatef( 360.0*DayOfYear/365.0, 0.0, 1.0, 0.0 );
glTranslatef( 4.0, 0.0, 0.0 );
glPushMatrix(); // Save matrix state
// Second, rotate the earth on its axis.
// Use HourOfDay to determine its rotation.
glRotatef( 360.0*HourOfDay/24.0, 0.0, 1.0, 0.0 );
// Third, draw the earth as a wireframe sphere.
glColor3f( 0.2, 0.2, 1.0 );
glutWireSphere( 0.4, 10, 10);
glPopMatrix(); // Restore matrix state

// Draw the moon.
// Use DayOfYear to control its rotation around the earth
glRotatef( 360.0*12.0*DayOfYear/365.0, 0.0, 1.0, 0.0 );
glTranslatef( 0.7, 0.0, 0.0 );
glColor3f( 0.3, 0.7, 0.3 );
glutWireSphere( 0.1, 5, 5 );
/* make me
glRotatef( 360.0*12.0*DayOfYear/365.0, 0.0, 1.0, 0.0 );
glTranslatef( 0.1, 1.0, 0.2 );
glColor3f( 0.0, 0.7, 1.0 );
glutWireSphere( 0.1, 3, 2 );
*/
// Flush the pipeline, and swap the buffers
glFlush();
glutSwapBuffers();

if ( singleStep ) {
spinMode = GL_FALSE;
}

glutPostRedisplay(); // Request a re-draw for animation purposes

}

// Initialize OpenGL's rendering modes
void OpenGLInit(void)
{
// glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_LINES);
//glColor3f(0.1,0.3,0.9);
//glVertex2f(-0.9,0.5);
//glVertex2f(-0.9,0.0);
// glutDisplayFunc(Haxxan);
glShadeModel( GL_FLAT );
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glClearDepth( 1.0 );
glEnable( GL_DEPTH_TEST );
}

// ResizeWindow is called when the window is resized
static void ResizeWindow(int w, int h)
{
float aspectRatio;
h = (h == 0) ? 1 : h;
w = (w == 0) ? 1 : w;
glViewport( 0, 0, w, h ); // View port uses whole window
aspectRatio = (float)w/(float)h;

// Set up the projection view matrix (not very well!)
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60.0, aspectRatio, 1.0, 30.0 );

// Select the Modelview matrix
glMatrixMode( GL_MODELVIEW );
}
// Main routine
// Set up OpenGL, hook up callbacks, and start the main loop
int main( int argc, char** argv )
{
// Need to double buffer for animation
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH );

// Create and position the graphics window
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( 600, 360 );

glutCreateWindow( "Solar System Demo" );

// Initialize OpenGL.
OpenGLInit();

// Set up callback functions for key presses


// Set up the callback function for resizing windows
glutReshapeFunc( ResizeWindow );

// Callback for graphics image redrawing
glutDisplayFunc( Animate );

// Start the main loop. glutMainLoop never returns.
glutMainLoop( );

return(0);
}

最佳答案

好吧,我想通了。

我使用顶点来为 X 设置动画,就像星星一样所以我想它会起作用而且它起作用了教授很高兴所以我希望这对其他人也有帮助

  static void Animate(void)
{
// Clear the redering window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (spinMode) {
// Update the animation state
HourOfDay += AnimateIncrement;
DayOfYear += AnimateIncrement/40.0;

HourOfDay = HourOfDay - ((int)(HourOfDay/28))*24;
DayOfYear = DayOfYear - ((int)(DayOfYear/365))*365;
}

// Clear the current matrix (Modelview)
glLoadIdentity();

// Back off eight units to be able to view from the origin.
glTranslatef ( 0.0, 0.0, -8.0 );

// Rotate the plane of the elliptic
// (rotate the model's plane about the x axis by fifteen degrees)
glRotatef( 15.0, 1.0, 0.0, 0.0 );

// Draw the sun -- as a yellow, wireframe sphere
glColor3f( 1.0, 1.0, 0.0 );
glutWireSphere( 1.0, 15, 15 );

glBegin(GL_LINES);
glColor3f(1.0,1.0,1.0);
//star 1
glVertex2f(0.4,2.5);
glVertex2f(0.6,2.6);

glVertex2f(0.6,2.5);
glVertex2f(0.4,2.6);
// star 2
glVertex2f(0.8,1.5);
glVertex2f(1.1,1.7);

glVertex2f(1.1,1.5);
glVertex2f(0.8,1.7);
// star 3
glVertex2f(0.8,3.5);
glVertex2f(1.1,3.7);

glVertex2f(1.1,3.5);
glVertex2f(0.8,3.7);

//star 4
glVertex2f(2.2,1.5);
glVertex2f(2.4,1.7);

glVertex2f(2.4,1.5);
glVertex2f(2.2,1.7);

//star 5
glVertex2f(-2.2,3.5);
glVertex2f(-2.4,3.7);

glVertex2f(-2.4,3.5);
glVertex2f(-2.2,3.7);

//star 6
glVertex2f(-0.4,2.5);
glVertex2f(-0.6,2.6);

glVertex2f(-0.6,2.5);
glVertex2f(-0.4,2.6);

//star 7
glVertex2f(-3.4,2.5);
glVertex2f(-3.6,2.6);

glVertex2f(-3.6,2.5);
glVertex2f(-3.4,2.6);

//star 8
glVertex2f(-4.4,2.5);
glVertex2f(-4.6,2.6);

glVertex2f(-4.6,2.5);
glVertex2f(-4.4,2.6);

//star 9
glVertex2f(-4.2,3.5);
glVertex2f(-4.4,3.7);

glVertex2f(-4.4,3.5);
glVertex2f(-4.2,3.7);
glEnd();
// Now Draw Stars
glColor3f(0.0,0.0,1.0);
//glutWireSphere( 0.3, 18, 9 );
//glLineStipple(0.1,0.1);
glVertex2f(0.9,0.3);
glVertex2f(0.6,0.3);

//end stars
// Draw the Earth
// First position it around the sun
// Use DayOfYear to determine its position
glRotatef( 360.0*DayOfYear/365.0, 0.0, 1.0, 0.0 );
glTranslatef( 4.0, 0.0, 0.0 );
glPushMatrix(); // Save matrix state
// Second, rotate the earth on its axis.
// Use HourOfDay to determine its rotation.
glRotatef( 360.0*HourOfDay/24.0, 0.0, 1.0, 0.0 );
// Third, draw the earth as a wireframe sphere.
glColor3f( 0.2, 0.2, 1.0 );
glutWireSphere( 0.4, 10, 10);
//glutSolidSphere(0.4,10,10);
glPopMatrix(); // Restore matrix state

// Draw the moon.
// Use DayOfYear to control its rotation around the earth
glRotatef( 360.0*12.0*DayOfYear/365.0, 0.0, 1.0, 0.0 );
// glRotatef( 360.0*60.0*DayOfYear/1000.0, 0.0, 1.0, 0.0 );
glTranslatef( 0.7, 0.0, 0.0 );
glColor3f( 0.3, 0.7, 0.3 );
glutWireSphere( 0.1, 5, 5 );

*/
// Flush the pipeline, and swap the buffers
glFlush();
glutSwapBuffers();

if ( singleStep ) {
spinMode = GL_FALSE;
}

glutPostRedisplay(); // Request a re-draw for animation purposes

}

关于c++ - 在 OpenGL 太阳系中创建星星,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30311049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com