ورود

View Full Version : مبتدی: Error در OpenGL



agep110
سه شنبه 21 خرداد 1392, 12:30 عصر
سلام دوستان.
عرض کنم خدمتتون :لبخند: که امروز صبح یه چند خطی کد OpenGL نوشتم که ارور زیر رو داد البته زیاد با OpenGL آشنا نیستم :لبخند: ولی به هر حال ممنون میشم بگید که دلیلش چیه.

در ضمن الان دارم این آموزش رو می خونم http://arcsynthesis.org/gltut/index.html به نظرتون منبع خوبیه؟:متفکر:

http://www.8pic.ir/images/71008450685564173697.png

UfnCod3r
سه شنبه 21 خرداد 1392, 13:26 عصر
glew رو لینک نکردی :عصبانی++:
ی کتاب خونس باید دانلودش کنی وبعد لینک کنی

agep110
سه شنبه 21 خرداد 1392, 13:33 عصر
ای بابا یادم رفته بود:لبخند::لبخند:
ممنون.:لبخند:

agep110
سه شنبه 21 خرداد 1392, 13:47 عصر
اجراش کردم ولی یه ارور دیگه داد. :لبخند: اینم کدها:
چه کنم؟:متفکر:

#include <GL\glew.h>
#include <GL\freeglut.h>
#include <vector>
#include <iostream>

const char *vertexShader = " \n\
#version 330 \n\
\n\
layout (location = 0) in vec4 Position; \n\
void main() \n\
{ \n\
gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0); \n\
}";

const char *fragementShader = " \n\
#version 330 \n\
\n\
out vec4 FragColor; \n\
void main() \n\
{ \n\
fragColor = vec4(1.0, 0.0, 0.0, 1.0); \n\
}";

static GLfloat vertex[] = {20.0, 20.0, 0.0,
30.0, 20.0, 0.0,
30.0, 30.0, 0.0};
GLuint vertexPosition;

void createVertexBuffer()
{
glClear(GL_COLOR_BUFFER_BIT);

glGenBuffers(1, &vertexPosition); // <<<<<<<<======== از این قسمت ارور میگیره
glBindBuffer(GL_ARRAY_BUFFER, vertexPosition);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);
}

void renderScene()
{
glClearColor(0.0, 0.0, 0.0, 0.0);

glBindBuffer(GL_ARRAY_BUFFER, vertexPosition);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);

glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);

glutSwapBuffers();
}

GLuint createShader(GLenum shaderType, const std::string shaderFile)
{
GLuint shader = glCreateShader(shaderType);
const char *fileDate = shaderFile.c_str();
glShaderSource(shader, 1, &fileDate, NULL);
glCompileShader(shader);

GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if (status == GL_FALSE)
{
GLint infoLogLenght;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLenght);

GLchar *infoLog = new GLchar[infoLogLenght + 1];
glGetShaderInfoLog(shader, infoLogLenght, NULL, infoLog);

const char *infoLogShaderType = NULL;
switch (shaderType)
{
case GL_VERTEX_SHADER: infoLogShaderType = "Vertex"; break;
case GL_GEOMETRY_SHADER: infoLogShaderType = "GEOMETRY"; break;
case GL_FRAGMENT_SHADER: infoLogShaderType = "Fragment"; break;
}
fprintf(stderr, "Compile failure in %s shader: \n%s\n", infoLogShaderType, infoLog);
delete[] infoLog;
}

return shader;
}

GLuint createProgram(const std::vector<GLuint> &shaderList)
{
GLuint program = glCreateProgram();
for (GLuint i = 0; i < shaderList.size(); i++)
{
glAttachShader(program, shaderList[i]);
}
glLinkProgram(program);

GLint status;
glGetProgramiv(program, GL_LINK_STATUS, &status);
if (status == GL_FALSE)
{
GLint infoLogLenght;
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLenght);

GLchar *infoLog = new GLchar[infoLogLenght + 1];
glGetProgramInfoLog(program, infoLogLenght, NULL, infoLog);
fprintf(stderr, "Linker failure: %s\n", infoLog);
delete [] infoLog;
}

for (GLuint i = 0; i < shaderList.size(); i++)
{
glDetachShader(program, shaderList[i]);
}

glUseProgram(program);
return program;
}

void initProgram()
{
std::vector<GLuint> shaderList;
shaderList.push_back(createShader(GL_VERTEX_SHADER , vertexShader));
shaderList.push_back(createShader(GL_FRAGMENT_SHAD ER, fragementShader));
createProgram(shaderList);

for (GLuint i = 0; i < shaderList.size(); i++)
{
glDeleteShader(shaderList[i]);
}
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glewInit();
glutInitDisplayMode(GL_DOUBLE | GL_RGB);
glutInitWindowSize(600, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("0101");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 100, 0.0, 100);



createVertexBuffer();
glutDisplayFunc(renderScene);

initProgram();

glutMainLoop();
return 0;
}

UfnCod3r
سه شنبه 21 خرداد 1392, 16:40 عصر
glBinBuffer,glGenBuffer و کلا توابع ای که مال نسخه های جدید تر هستن اینا جز gl.h نیستن و مربوط ب glew هستن
تابع هم نیستن اشاره گر ب تابع هستن
باید اول از همه glewInit رو صدا بزنی تا اونا مقدار دهی بشن .
یا glewInit یا initGlew
:متفکر:

agep110
سه شنبه 21 خرداد 1392, 17:32 عصر
بازم یه ارور دیگه : :گریه::لبخند:

http://www.8pic.ir/images/81318373305486328649.png

UfnCod3r
سه شنبه 21 خرداد 1392, 19:52 عصر
تو اصلا اررو می خونی ؟:گریه:
خدایی این unresloved external symbol رو روزی چند بار می بینی
این همش ی مفهومو می رسونه
لینک
کن
Glew
لینک نکردی:گریه:
:عصبانی++:

agep110
سه شنبه 21 خرداد 1392, 22:25 عصر
باور کن از اول لینک بود بیا نگاه کن دوباره لینکش کردم بازم همون ارور رو میده :

http://www.8pic.ir/images/33285183430258612558.png