Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Солнце   Найти похожие ветки 

 
некто   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.066 c
14-1107851536
Хинт
2005-02-08 11:32
2005.02.27
ICQ uin


1-1108441307
Steve
2005-02-15 07:21
2005.02.27
TImageList - как можно из одного рисунка вырезать много мелких?


4-1105977134
Cosinus
2005-01-17 18:52
2005.02.27
Не пойму... Что не так в этом коде?


14-1107830961
Думкин
2005-02-08 05:49
2005.02.27
С Днем рождения! 8 февраля


14-1107745364
Думкин
2005-02-07 06:02
2005.02.27
С Днем рождения! 7 февраля