C++ 为什么我的屏幕在旋转这个立方体时会闪烁? #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; //屏幕尺寸常数 屏幕宽度=640; 屏幕上的常数=480; bool SetOpenGLAttributes() { //SDL_GL_CONTEXT_CORE只提供较新版本,不推荐使用的函数被禁用 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,2); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); 返回true; } int main(int argc,char*args[] { SDL_Window*Window=NULL; //初始化SDL if(SDL_Init(SDL_Init_视频)
我正在学习openGL和SDL。我设法让这个“立方体”出现,但它看起来只是一个红色的矩形。我想旋转立方体以确保我的代码实际上正在生成立方体,但是当我旋转然后交换窗口时,立方体只会闪烁。第二个缓冲区窗口似乎是黑色的,但当它再次切换时,它始终是相同的红色矩形。为什么我不能旋转我的立方体,为什么我的第二个缓冲区窗口是黑色的?C++ 为什么我的屏幕在旋转这个立方体时会闪烁? #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; //屏幕尺寸常数 屏幕宽度=640; 屏幕上的常数=480; bool SetOpenGLAttributes() { //SDL_GL_CONTEXT_CORE只提供较新版本,不推荐使用的函数被禁用 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,2); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); 返回true; } int main(int argc,char*args[] { SDL_Window*Window=NULL; //初始化SDL if(SDL_Init(SDL_Init_视频),c++,opengl,sdl,C++,Opengl,Sdl,我正在学习openGL和SDL。我设法让这个“立方体”出现,但它看起来只是一个红色的矩形。我想旋转立方体以确保我的代码实际上正在生成立方体,但是当我旋转然后交换窗口时,立方体只会闪烁。第二个缓冲区窗口似乎是黑色的,但当它再次切换时,它始终是相同的红色矩形。为什么我不能旋转我的立方体,为什么我的第二个缓冲区窗口是黑色的? 清除帧缓冲区并在每次(运行)循环时通过重新绘制多维数据集。 现在,您只需在包含多维数据集的帧缓冲区和空白帧缓冲区之间切换 等等 如果要使用已删除的功能,如glBegin(),请不
- 清除帧缓冲区并在每次(运行)循环时通过
重新绘制多维数据集。 现在,您只需在包含多维数据集的帧缓冲区和空白帧缓冲区之间切换
- 等等
- 如果要使用已删除的功能,如
,请不要请求。这是行不通的glBegin()
- 使用
/SDL\u polleevent()
来泵送事件循环,以保持操作系统满意SDL\u WaitEvent()
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#include <stdio.h>
#include <OpenGL/gl.h>
#include <string.h>
using namespace std;
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
bool SetOpenGLAttributes()
{
// SDL_GL_CONTEXT_CORE gives us only the newer version, deprecated functions are disabled
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
return true;
}
int main( int argc, char* args[] )
{
SDL_Window* window = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//Create window
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL );
if( window == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
}
else
{
//creating new context
SDL_GL_CreateContext(window);
SetOpenGLAttributes();
SDL_GL_SetSwapInterval(1);
//cube front
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, .5, -.5);
glVertex3f(.5, .5, -.5);
glVertex3f(.5, -.5, -.5);
glVertex3f(-.5, -.5, -.5);
glEnd();
//cube top
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glVertex3f(-.5,.5,-.5);
glVertex3f(.5, .5, -.5);
glVertex3f(.5, .5, .5);
glVertex3f(-.5, .5, .5);
glEnd();
//cube bottom
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5,-.5,-.5);
glVertex3f(.5, -.5, -.5);
glVertex3f(.5, -.5, .5);
glVertex3f(-.5, -.5, .5);
glEnd();
//cube right
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(.5, -.5, -.5);
glVertex3f(.5, -.5, .5);
glVertex3f(.5, .5, .5);
glVertex3f(.5, .5, -.5);
glEnd();
//cube left
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, -.5, -.5);
glVertex3f(-.5, .5, -.5);
glVertex3f(-.5, .5, .5);
glVertex3f(-.5, -.5, .5);
glEnd();
//cube back
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, .5, .5);
glVertex3f(-.5, -.5, .5);
glVertex3f(.5, -.5, .5);
glVertex3f(.5, .5, .5);
glEnd();
glFlush();
SDL_GL_SwapWindow(window);
bool running = true;
while(running){
glRotatef(1, 1, 0, 0);
glFlush();
SDL_GL_SwapWindow(window);
SDL_Delay(100);
}
}
}
//Destroy window
//SDL_DestroyWindow( window );
//Quit SDL subsystems
//SDL_Quit();
return 0;
}
#包括
#包括
#包括
#包括
//屏幕尺寸常数
屏幕宽度=640;
屏幕上的常数=480;
int main(int argc,char*args[]
{
SDL_Window*Window=NULL;
//初始化SDL
if(SDL_Init(SDL_Init_视频)<0)
{
printf(“SDL无法初始化!SDL_错误:%s\n”,SDL_GetError());
返回退出失败;
}
//创建窗口
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
window=SDL\u CreateWindow
(
“SDL教程”,
SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,
屏幕宽度,屏幕高度,
SDL\u窗口\u OPENGL
);
如果(窗口==NULL)
{
printf(“无法创建窗口!SDL_错误:%s\n”,SDL_GetError());
返回退出失败;
}
//创造新环境
SDL_GLContext ctx=SDL_GL_CreateContext(窗口);
SDL_GL_SetSwapInterval(1);
bool running=true;
(跑步时)
{
SDL_事件ev;
while(SDL_事件和ev))
{
if((SDL_QUIT==ev.type)||
(SDL U KEYDOWN==ev.type&&SDLK\U ESCAPE==ev.key.keysym.sym))
{
运行=错误;
打破
}
}
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrix
#include <cstdio>
#include <cstdlib>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
SDL_Window* window = NULL;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
return EXIT_FAILURE;
}
//Create window
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
window = SDL_CreateWindow
(
"SDL Tutorial",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT,
SDL_WINDOW_OPENGL
);
if( window == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
return EXIT_FAILURE;
}
//creating new context
SDL_GLContext ctx = SDL_GL_CreateContext(window);
SDL_GL_SetSwapInterval(1);
bool running = true;
while( running )
{
SDL_Event ev;
while( SDL_PollEvent( &ev ) )
{
if( ( SDL_QUIT == ev.type ) ||
( SDL_KEYDOWN == ev.type && SDLK_ESCAPE == ev.key.keysym.sym ) )
{
running = false;
break;
}
}
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
static float angle = 0.0f;
angle += 1;
glRotatef( angle, 0.2, 0.3, 0.1 );
//cube front
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, .5, -.5);
glVertex3f(.5, .5, -.5);
glVertex3f(.5, -.5, -.5);
glVertex3f(-.5, -.5, -.5);
glEnd();
//cube top
glBegin(GL_POLYGON);
glColor3f(1.0,0.0,0.0);
glVertex3f(-.5,.5,-.5);
glVertex3f(.5, .5, -.5);
glVertex3f(.5, .5, .5);
glVertex3f(-.5, .5, .5);
glEnd();
//cube bottom
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5,-.5,-.5);
glVertex3f(.5, -.5, -.5);
glVertex3f(.5, -.5, .5);
glVertex3f(-.5, -.5, .5);
glEnd();
//cube right
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(.5, -.5, -.5);
glVertex3f(.5, -.5, .5);
glVertex3f(.5, .5, .5);
glVertex3f(.5, .5, -.5);
glEnd();
//cube left
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, -.5, -.5);
glVertex3f(-.5, .5, -.5);
glVertex3f(-.5, .5, .5);
glVertex3f(-.5, -.5, .5);
glEnd();
//cube back
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-.5, .5, .5);
glVertex3f(-.5, -.5, .5);
glVertex3f(.5, -.5, .5);
glVertex3f(.5, .5, .5);
glEnd();
SDL_GL_SwapWindow(window);
SDL_Delay( 16 );
}
SDL_GL_DeleteContext(ctx);
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
main loop:
reset view
render
swap buffers
// Clear Screen And Depth Buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Reset The Current Modelview Matrix
glLoadIdentity();
glTranslatef(0.0f, 0.0f,-7.0f); // Translate Into The Screen 7.0 Units
glRotatef(rotqube,0.0f,1.0f,0.0f); // Rotate The cube around the Y axis
glRotatef(rotqube,1.0f,1.0f,1.0f);
glBegin(GL_QUADS); // Draw The Cube Using quads
glColor3f(0.0f,1.0f,0.0f); // Color Blue
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top)
glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top)
glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top)
glColor3f(1.0f,0.5f,0.0f); // Color Orange
glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom)
glColor3f(1.0f,0.0f,0.0f); // Color Red
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front)
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front)
glColor3f(1.0f,1.0f,0.0f); // Color Yellow
glVertex3f( 1.0f,-1.0f,-1.0f); // Top Right Of The Quad (Back)
glVertex3f(-1.0f,-1.0f,-1.0f); // Top Left Of The Quad (Back)
glVertex3f(-1.0f, 1.0f,-1.0f); // Bottom Left Of The Quad (Back)
glVertex3f( 1.0f, 1.0f,-1.0f); // Bottom Right Of The Quad (Back)
glColor3f(0.0f,0.0f,1.0f); // Color Blue
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Left)
glColor3f(1.0f,0.0f,1.0f); // Color Violet
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right)
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right)
glEnd(); // End Drawing The Cube
rotqube +=0.9f; // Increase Angle