Форум: "Игры";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизСолнце Найти похожие ветки
← →
некто (2004-11-21 23:02) [0]Я понимаю что такие вопросы наверняка уже многим надоели, но в яндексе я ничего не нашёл, а то что нашёл, то весьма замудрёно.
Подкиньте простенький код на VC++ для моделирования солнечной системы. Сам то я всё уже смоделировал, но солнце никак не хочет светиться. Сам делаю так, помещаю в сферу в центре экрана (солнце) 2 светильника, направленных в разные стороны.
прилагаю код
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#include <math.h>
GLint windW, windH;
static void CALLBACK Reshape(int width, int height)
{ glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-200,200,-200,200,-200,200);
gluLookAt(5,5,5,0,0,0,0,1,0);
glMatrixMode(GL_MODELVIEW);
}
static void CALLBACK Planet(double r, //цвет
double g, //пла-
double b, //неты
double rotate, //скорость обращения вокруг солнца
double trans, //дальность орбиты
double radius) //радиус планеты
{
glPushMatrix();
glColor3d(r, g, b);
glRotated(rotate/2, 0, 1, 0);
glTranslated(trans, 0, 0);
auxSolidSphere(radius);
glPopMatrix();
}
static void CALLBACK Draw(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
//солнце
Planet(1.0, 1.0, 0, 0, 0, 100);
//меркурий
static double mercury=0;
Planet(1.0, 0.55, 0, mercury, 12, 0.5);
mercury=mercury+1;
//венера
static double venera=10;
Planet(0.3, 1.0, 1.0, venera, 20, 1.3);
venera=venera+0.8;
//земля
static double zemlya=20;
Planet(0.3, 0.3, 1.0, zemlya, 30, 2.3);
zemlya=zemlya+0.6;
//марс
static double mars=-20;
Planet(1.0, 0, 0, mars, 37, 1.6);
mars=mars+0.5;
Sleep(5);
//юпитер
static double jupiter=-10;
Planet(1.0, 0.2, 1.0, jupiter, 60, 5);
jupiter=jupiter+0.32;
//сатурн
static double saturn=35;
Planet(0.7, 0.9, 0.8, saturn, 75, 4);
saturn=saturn+0.27;
//уран
static double yran=-35;
Planet(0.3, 0.9, 0.8, yran, 90, 3);
yran=yran+0.2;
//нептун
static double neptun=45;
Planet(0.1, 0.4, 1.0, neptun, 120, 2.7);
neptun=neptun+0.1;
//плутон
static double pluto=-45;
Planet(0.5, 0.5, 0.5, pluto, 150, 0.85);
pluto=pluto+0.03;
auxSwapBuffers();
}
void main(int argc, char **argv)
{
float pos1[4]={1,0,0}; //определение координат источников света
float pos2[4]={0,0,0}; //определение координат источников света
float dir1[3]={199,0,0};
float dir2[3]={-199,0,0};
GLfloat ambient[]={0,0,0,1};
windW = 680;
windH = 680;
auxInitPosition(150, 0, windW, windH);
auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE);
auxInitWindow("Пародия на солнечную систему");
auxReshapeFunc(Reshape);
auxIdleFunc(Draw);
glEnable (GL_DEPTH_TEST); //разрешение теста глубины
glEnable (GL_COLOR_MATERIAL); //установка свойств материала
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
glEnable (GL_LIGHTING); //разрешение освещения
glEnable (GL_LIGHT0); //включение нулевой лампы
glLightfv(GL_LIGHT0, GL_POSITION, pos1);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir1);
glEnable (GL_LIGHT1); //включение первой лампы
glLightfv(GL_LIGHT1, GL_POSITION, pos2);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, dir2);
/*GLfloat mat_specular[]={1,0,0,1};
glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialf (GL_FRONT, GL_SHININESS, 128.0);*/
GLfloat sun_front[]={1,1,0,1};
GLfloat sun_back[]={0,0,1,1};
glMaterialfv (GL_FRONT, GL_EMISSION, sun_front);
glMaterialfv (GL_BACK, GL_EMISSION, sun_back);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
auxMainLoop(Draw);
}
← →
некто (2004-11-22 00:02) [1]извините что указал C++ Builder, но на самом деле это MicroSoft Visual C++
← →
Гарри Поттер © (2004-11-23 08:53) [2]некто (21.11.04 23:02)
но солнце никак не хочет светиться.
ИМХО, Светится - в прямом смысле, ты его не заставишь. Надо нарисовать солнце так, чтобы было впечатление свечения. Попробуй солнце рисовать двумя сферами, одна поменьше внутри другой, которая чуть больше. Большую сферу сделай прозрачной и светлее чем внутреннюю.
Вроде сдесь: http://nehe.gamedev.net/ был такой пример.
← →
NikotiN © (2004-11-23 17:25) [3]ааааааааа!
казачок в нашей песочнице.....
бейте его девчонки! :)
← →
miek © (2004-11-23 22:17) [4]Да еще и чистоAPI-шник! Чур меня (перезвездился), чур!
← →
Blackman © (2004-11-23 23:16) [5]>то весьма замудрёно.
Солнце слоооооожная штука :)
>Planet(1.0, 1.0, 0, 0, 0, 100);
Planet(1.0, 1.0, 0, 0, 0, 10);
← →
dimodim-modern (2004-11-26 22:31) [6]ФОРУМ МАСТЕРА ДЕЛЬФИ - ОФФТОПИК АХТУНГ АЛАРМ АЛАРМ !!!!
← →
XProger © (2004-11-27 00:16) [7]http://delphigfx.mastak.ru/samples6.htm
BTG viewer - тут посмотри на реализацию billboard"ов
← →
TButton © (2004-11-27 01:00) [8]Was? Jude?
Soldaten! Foer!
← →
NikotiN © (2004-11-27 10:04) [9]//Я понимаю что такие вопросы наверняка уже многим надоели, но в яндексе я ничего не нашёл, а то что нашёл, то весьма замудрёно.
поищи на
www.metabot.ru
www.google.com
...
:)
← →
марсианин © (2004-11-27 17:53) [10]че-то я не понял, у тебя и 2 источника света, еще и GL_EMISSION включено для всех объектов.
может, оно и освещается, но незаметно?
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.048 c