ورود

View Full Version : مبتدی: محو شدگی تدریجی



mehran788
یک شنبه 26 خرداد 1392, 15:35 عصر
با سلام و خسته نباشید.
من می خوام چند تا کره تو صفحه رسم کنم که به از اولین تا آخرین کره به تدریج محو بشه.مشکلم اینجاس که نمی تونم چطور محو شدگی خطی رو ار این کره ها اعمال کنم.تا اونجا که من درباره اش خوندم GL_LINEAR باعث محو شدگی خطی میشه ولی وقتی می نویسم هیچ تغییری رو کره ها نمی ذاره
کد هام هم اینه
#include "stdafx.h"
#include<iostream>
#include<windows.h>
#include<glut.h>

void init()
{
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
glEnable(GL_FOG);
glFogi(GL_FOG_MODE,GL_LINEAR);
glFogf(GL_FOG_START,1);
glFogf(GL_FOG_END,20);
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT);
for (int i=1;i<=5;i++)
{
glTranslatef(0.1,0.1,0);
glutSolidSphere(0.1,60,70);
}
glEnd();
glFlush();
}

int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(500,100);
glutCreateWindow("Light");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}


لطفا اگه کسی می دونه کمکم کنه.

amin1softco
دوشنبه 27 خرداد 1392, 16:11 عصر
فک کنم یک چیزی توی این مایه ها بشه :


#include "stdafx.h"
#include <GL/gl.h>

#include <GL/glut.h>

GLfloat angle = 0.0;
GLfloat density = 0.3; //set the density to 0.3 which isacctually quite thick
GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0}; //set the forcolor to grey

void sphere (void) {
glRotatef(angle, 1.0, 0.0, 0.0);
glRotatef(angle, 0.0, 1.0, 0.0);
glRotatef(angle, 0.0, 0.0, 1.0);
glColor3f(1.0, 0.0, 0.0);
for (int i=1;i<=5;i++)
{
glTranslatef(0.4,0.1,0);
glutSolidSphere(0.2,60,70);
}
}

void init (void) {


glEnable (GL_DEPTH_TEST); //enable the depth testing
glFogf(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, 0.35f);
glHint(GL_FOG_HINT, GL_DONT_CARE);
glFogf(GL_FOG_START, 1.0f);
glFogf(GL_FOG_END, 5.0f);
glEnable(GL_FOG);
}

void display (void) {

glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
sphere();
glutSwapBuffers();
angle ++;

}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH
);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("A basic OpenGL Window");

init ();

glutDisplayFunc (display);

glutIdleFunc (display);

glutReshapeFunc (reshape);

glutMainLoop ();

return 0;

}

mehran788
دوشنبه 27 خرداد 1392, 17:21 عصر
ممنون از لطفت داداش
ولی تو محو شدگی خطی که من می گم باید کره آخر دیگه تقریبا محو بشه و تو کد شما هم اینجوری نیست.

amin1softco
دوشنبه 27 خرداد 1392, 18:38 عصر
شما باید بلندینگ را فعال کنید فک کنم یک چیزی در این مایه ها :

#include <GL/gl.h>

#include <GL/glut.h>

GLfloat angle = 0.0;
GLfloat density = 0.1; //set the density to 0.3 which isacctually quite thick
GLfloat fogColor[4] = {0.5, 0.5, 0.5, 0.0}; //set the forcolor to grey

void sphere (void) {
glRotatef(angle, 1.0, 0.0, 0.0);
glRotatef(angle, 0.0, 1.0, 0.0);
glRotatef(angle, 0.0, 0.0, 1.0);

for (int i=5;i>=1;i--)
{
glColor4f(1.0, 0.0, 0.0,1.0/(i*3));
glTranslatef(0.4,0.1,0);
glutSolidSphere(0.2,60,70);
}
}

void init (void) {


glEnable (GL_DEPTH_TEST); //enable the depth testing
glFogf(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, fogColor);
glFogf(GL_FOG_DENSITY, 0.35f);
glHint(GL_FOG_HINT, GL_DONT_CARE);
glFogf(GL_FOG_START, 1.0f);
glFogf(GL_FOG_END, 5.0f);
glEnable(GL_FOG);
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // Set The Blending Function For Translucency
glEnable(GL_BLEND);
}

void display (void) {

glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
sphere();
glutSwapBuffers();
angle ++;

}

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

int main (int argc, char **argv) {

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInitWindowSize (500, 500);

glutInitWindowPosition (100, 100);

glutCreateWindow ("A basic OpenGL Window");

init ();

glutDisplayFunc (display);

glutIdleFunc (display);

glutReshapeFunc (reshape);

glutMainLoop ();

return 0;

}

mehran788
دوشنبه 27 خرداد 1392, 18:57 عصر
داداش از کمک هات ممنونم.نمی دونم چه طور ازت تشکر کنم