agep110
سه شنبه 21 خرداد 1392, 13:30 عصر
سلام دوستان.
عرض کنم خدمتتون :لبخند: که امروز صبح یه چند خطی کد OpenGL نوشتم که ارور زیر رو داد البته زیاد با OpenGL آشنا نیستم :لبخند: ولی به هر حال ممنون میشم بگید که دلیلش چیه.
در ضمن الان دارم این آموزش رو می خونم http://arcsynthesis.org/gltut/index.html به نظرتون منبع خوبیه؟:متفکر:
http://www.8pic.ir/images/71008450685564173697.png
UfnCod3r
سه شنبه 21 خرداد 1392, 14:26 عصر
glew رو لینک نکردی :عصبانی++:
ی کتاب خونس باید دانلودش کنی وبعد لینک کنی
agep110
سه شنبه 21 خرداد 1392, 14:33 عصر
ای بابا یادم رفته بود:لبخند::لبخند:
ممنون.:لبخند:
agep110
سه شنبه 21 خرداد 1392, 14: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, 17:40 عصر
glBinBuffer,glGenBuffer و کلا توابع ای که مال نسخه های جدید تر هستن اینا جز gl.h نیستن و مربوط ب glew  هستن 
تابع هم نیستن اشاره گر ب تابع هستن 
باید اول از همه glewInit رو صدا بزنی تا اونا مقدار دهی بشن .
یا glewInit یا initGlew
:متفکر:
agep110
سه شنبه 21 خرداد 1392, 18:32 عصر
بازم یه ارور دیگه : :گریه::لبخند:
http://www.8pic.ir/images/81318373305486328649.png
UfnCod3r
سه شنبه 21 خرداد 1392, 20:52 عصر
تو  اصلا اررو می خونی ؟:گریه:
خدایی این unresloved external symbol رو روزی چند بار می بینی 
این همش ی مفهومو می رسونه
لینک
کن
Glew
لینک نکردی:گریه:
:عصبانی++:
agep110
سه شنبه 21 خرداد 1392, 23:25 عصر
باور کن از اول لینک بود بیا نگاه کن دوباره لینکش کردم بازم همون ارور رو میده : 
http://www.8pic.ir/images/33285183430258612558.png
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.