作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 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);
}
最佳答案
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/
我已经完成了使用OpenGL和C++构建太阳系的工作。该系统的功能之一是在每个行星上指向北的摄像机位置会根据行星变换而移动。摄像机的位置是:一个在顶部,一个在行星后面一点,最后一个远离行星。还有其他一
美好的一天,我正在尝试用 javascript 创建一个简单的 2D 太阳系模型,但我在理解如何计算下一帧行星的位置以及其他一些我将要解决的问题时遇到了一些麻烦很快就会详细介绍。 看完this非常好的
我有以下要加载到 Oracle 表的 csv 文件。 cat to_load_pplp.csv Table PPL_CH_USAGE,178,01/Sep/2017 09:03:30,01/Sep/2
我是一名优秀的程序员,十分优秀!