EDIT ........ 그래서 나는 모든 허튼 소리를 없애고 현재 SSCE를 가졌습니다. (잘하면 나는 현재 무엇인지 이해합니다). 이 문제를 이미 보지 못했지만 크기를 조정할 때 가로 세로 비율을 유지하고 싶지만 크기 조정과 관련하여 아무 것도 주석 처리하지 않은 것처럼 윈도우가 작동합니다 (늘어납니다). 나는 모든 점을 따라 투영 행렬을 검사했고 기대했던 점에서 바뀌었고 기대했던 점에서 같았습니다.gluPerspective도 glOrtho도 아무런 효과가 없습니다.
다른 파일에 의존하는 항목을 제거 했으므로 셰이더 파일을 제외하고 컴파일해야합니다. 코드도 게시합니다 (매우 짧습니다). 미안하지만 형식이 매우 멋지게 보이지 않으므로 대부분의 줄 앞에 4 칸을 써야합니다.
도중에 와이어 큐브가 나타나지 않습니다. 그러나 첫 번째 답변자의 제안을 축 어적으로 복사하고 컴파일 할 때 나타납니다. 그것이 내 문제와 관련이 있는지 확실하지 않습니다.
#define GLEW_STATIC
#include "glew.h"
#include "glut.h"
#include <Windows.h>
#include <iostream>
//#include "TgaParser.h"
//#include "Vertex.h"
//#include "ObjParser.h"
//#include "Car.h"
//#include "Floor.h"
//#include "BitmapParser.h"
using namespace std;
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"glut32.lib")
#pragma comment(lib, "glew32s.lib")
/*GLOBALS*/
int g_ScreenWidth = 800;
int g_ScreenHeight = 800;
int g_Program = 0;
int g_PositionHandle = 0;
int g_TextureCoordhandle = 0;
int g_ModelMatrixHandle = 0;
//Car* g_pCar = 0;
//Floor* g_pFloor = 0;
void error(char * error)
{
printf(error);
system("pause");
exit(0);
}
static void checkGlError(const char* op)
{
for (GLint error = glGetError(); error; error
= glGetError())
{
const GLubyte* sError = gluErrorString(error);
printf("Shader error %s\n",sError);
}
}
GLuint loadShader(GLenum shaderType, const char* pSource)
{
GLuint shader = glCreateShader(shaderType);
if (shader)
{
glShaderSource(shader, 1, &pSource, NULL);
glCompileShader(shader);
GLint compiled = 0;
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
checkGlError("createVertexShader");
if (!compiled)
{
GLint infoLen = 0;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
if (infoLen)
{
char* buf = (char*) malloc(infoLen);
if (buf)
{
glGetShaderInfoLog(shader, infoLen, NULL, buf);
printf(buf);
free(buf);
}
glDeleteShader(shader);
shader = 0;
}
}
}
return shader;
}
GLuint createProgram(const char* pVertexSource, const char* pFragmentSource)
{
GLuint vertexShader = loadShader(GL_VERTEX_SHADER, pVertexSource);
checkGlError("createVertexShader");
if (!vertexShader)
{
return 0;
}
GLuint pixelShader = loadShader(GL_FRAGMENT_SHADER, pFragmentSource);
if (!pixelShader)
{
return 0;
}
GLuint program = glCreateProgram();
g_Program=program;
if (program)
{
glAttachShader(program, vertexShader);
checkGlError("glAttachShader");
glAttachShader(program, pixelShader);
checkGlError("glAttachShader");
glLinkProgram(program);
GLint linkStatus = GL_FALSE;
glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
if (linkStatus != GL_TRUE)
{
GLint bufLength = 0;
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);
if (bufLength)
{
char* buf = (char*) malloc(bufLength);
if (buf)
{
glGetProgramInfoLog(program, bufLength, NULL, buf);
free(buf);
}
}
glDeleteProgram(program);
program = 0;
}
}
return program;
}
void forward_display()
{
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60, (GLfloat)g_ScreenWidth/(GLfloat)g_ScreenHeight, 0.1, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//gluLookAt(0, -0.5, 1, 0, 0, -1, 0, 1, 0);
//glPushMatrix();
//glRotatef(timeGetTime()*0.05,0,1,0);
//g_pCar->Draw(g_ModelMatrixHandle, g_PositionHandle, g_TextureCoordhandle);
//glPopMatrix();
glTranslatef(0, 0, -2);
glColor3f(1,0,0);
glRotatef(45, 1, 1, 0);
glutWireCube(1);
glutSwapBuffers();
}
void forward_animate()
{
forward_display();
}
/*Reads in all of the data contents automatically allocating memory for the content*/
char* readFileData (char * fileName)
{
FILE *fp = fopen(fileName,"r");
if (fp==0)
{
error("Why is all rum gone!!\n");
return 0;
}
fseek(fp, 0L, SEEK_END);
int sz = ftell(fp);
fseek(fp, 0L, SEEK_SET);
char * data = new char[sz+1];
memset(data,0,sz+1);
fread(data,1,sz,fp);
fclose(fp);
return data;
}
void init()
{
char * vertexShaderBuffer = readFileData("../resources/shaders/IntroToShaders.vs");
char * pixelShaderBuffer = readFileData("../resources/shaders/IntroToShaders.ps");
g_Program = createProgram (vertexShaderBuffer, pixelShaderBuffer);
//We have finished compiling the shader now delete the char arrays with the source code
delete [] vertexShaderBuffer;
delete [] pixelShaderBuffer;
g_PositionHandle = glGetAttribLocation(g_Program, "vPosition");
g_TextureCoordhandle = glGetAttribLocation(g_Program, "vTextureCoord");
g_ModelMatrixHandle = glGetUniformLocation(g_Program, "modelview_matrix");
if (g_PositionHandle == -1)
{
printf("g_PositionHandle is bad\n");
}
if (g_TextureCoordhandle == -1)
{
printf("g_TextureCoordhandle is bad\n");
}
if (g_ModelMatrixHandle == -1)
{
printf("g_ModelMatrixHandle is bad\n");
}
glUseProgram(g_Program);
//g_pCar = new Car();
//g_pCar->Initialise();
//g_pFloor = new Floor();
//g_pFloor->Initialise();
//g_pCar->InitTextures();
//g_pFloor->InitTextures();
//g_pCar->LoadTextures();
//g_pFloor->LoadTextures();
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
void reshape(int w, int h)
{
g_ScreenWidth = w;
g_ScreenHeight = h;
glViewport(0, 0, w, h);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(g_ScreenWidth, g_ScreenHeight);
glutCreateWindow("Assignment 1");
glewInit();
init();
glutDisplayFunc(forward_display);
glutIdleFunc(forward_animate);
glutReshapeFunc(reshape);
glutMainLoop();
/*
DONT DO THINGS HERE
*/
return 0;
}
IntroToShaders.ps :
varying vec2 vTexCoord;
uniform sampler2D myTexture;
void main (void)
{
gl_FragColor = texture2D(myTexture, vTexCoord);
}
IntroToShaders.vs :
attribute vec3 vPosition;
attribute vec2 vTextureCoord;
varying vec2 vTexCoord;
uniform mat4 modelview_matrix;
void main(void)
{
vTexCoord = vTextureCoord;
gl_Position = modelview_matrix*vec4(vPosition,1.0);
}
-1 : 가지고 계신 것과 비슷합니다. * 가지고 있지 않은 것이 있습니다. 작업 코드를 게시하면 * 작동하지 않는 코드에서 문제를 찾을 수 없습니다. 우리는 귀하의 문제에 관한 SSCCE 코드를 볼 필요가 있습니다. –
"대부분의 줄 앞에 4 칸을 넣지 않아도 서식을 유지하기가 어렵습니다."Visual Studio/Eclipse/Netbeans를 사용하여 편집 할 때 옵션에서 4- 공백 탭을 설정하면 전체 프로그램을 선택하고 탭을 누르십시오. 모든 것을 4 칸 들여 쓰기해야합니다. – genpfault
감사합니다. genpfault !!! 나는 다음 번에 질문을 게시 할 것입니다 :-) – Erin