LINUX.ORG.RU

Кодю :)


0

0

Сегодня наконец-то сделал относительно нормальный рендеринг ландшафта в своём проекте. Решил поделиться своей радостью с посетителями ресурса.

>>> Просмотр (1280x1024, 82 Kb)



Проверено: Shaman007 ()

Ответ на: комментарий от anonymous

цитирую автора:

"п...ц линейке"

гг

anonymous
()
Ответ на: комментарий от cleg

Нормали только посчитай :) А так верю, отчего ж не верить ? А того великана я знал...

П.С. Чего почитать чтобы начать кодить под линух (под винду OpenGL кодил много, сначала на асме (1K intros и tutorial), потом перешел на си (странный путь, неправда ли ? :))) Кинь в меня тьютом каким, или соцром... T.Y.

tylerdurden
()
Ответ на: комментарий от tylerdurden

OpenGL - вроде такое-же. При компиляции укажи -lGL и если используешь glut то -lglut.

YesSSS ★★★
()

> что за проект?
совмещаю приятное с полезным: пишу игру и учу C++/OpenGL.

> "п...ц линейке"
да, ну теперь линейке уж точно конец.

> Графика круче чем хирос 5 !!!
точно =)

> а че - 5 герои - образец графики???
во всяком случае, выглядят они прекрасно.

> Нормали только посчитай :)
не умею =( я пока только учусь.

> П.С. Чего почитать чтобы начать кодить под линух (под винду OpenGL кодил много, сначала на асме (1K intros и tutorial), потом перешел на си (странный путь, неправда ли ? :))) Кинь в меня тьютом каким, или соцром... T.Y.
скачай SDL, там в папке test есть пример testgl.c, с него можно начать.

> OpenGL - вроде такое-же. При компиляции укажи -lGL и если используешь glut то -lglut.
GLUT - гадость и лажа. я использую SDL (Simple Directmedia Layer).

EViL
() автор топика

Я понимаю что это вроде как радость.... но как грится, еще "пилить и пилить" =)

Чиста ради прикола накидал, чтоб вспомнить былую молодость =) Текстуру накинул первую попавшуюся =) http://storage02.gorodok.net/landscape.jpg

MYMUR ★★★★
()
Ответ на: комментарий от lester_dev

Нормали я считал тут (вроде правильно хз, непомню, этот тест я писал еще на vs год назад... необессуде уж :)) Текстура - плазма, она же юзается как хейтмэп. Как видите никакого glut'а вообще нет, все только через opengl.dll: #pragma comment(linker,"/section:.text,ewrx /ignore:4078 /opt:nowin98 /merge:.data=.text /merge:.rdata=.text /entry:main /out:opengl.exe /release /subsystem:windows /nodefaultlib /stub:stub.exe")

#include "windows.h" #include "gl/gl.h" #include "fmod.h" #include "music.h" #define textureSize 128 #define mapSteps 70.0 #define yScale 256.0

extern "C"{ int _fltused; __declspec(naked) void _ftol(){ __asm{ fistp dword ptr [esp-12] mov eax,dword ptr [esp-12] mov ecx,dword ptr [esp-8] ret } } }; static PIXELFORMATDESCRIPTOR pfd={ sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUB LEBUFFER,PFD_TYPE_RGBA,32,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,PFD_MAIN_PLANE,0,0,0, 0 }; float zCube,theta,delta=0.1; HDC hDC; DWORD x,y,maxX,maxY,ticks,angle1,angle2,angle3,angle4,time1,time2,time3,time4,ofs; BYTE *texture,*texture2,*cosTable,k=0; double fH,fW;

double tan(double x){ __asm{ fld x fptan fstp x fstp x } return x; }

float cos(float x){ __asm{ fld x fcos fstp x } return x; } void F_CALLBACKAPI cbCube(FMUSIC_MODULE *handle,unsigned char userdata){ zCube=0.5; return; }

void drawNormal(float x1,float y1,float z1,float x2,float y2,float z2,float x3,float y3,float z3){ float v1[3],v2[3]; static const int x=0; static const int y=1; static const int z=2; v1[x]=x1-x2; v1[y]=y1-y2; v1[z]=z1-z2; v2[x]=x2-x1; v2[y]=y2-y1; v2[z]=z2-z1; glNormal3f(v1[y]*v2[z]-v1[z]*v2[y],v1[z]*v2[x]-v1[x]*v2[z],v1[x]*v2[y]-v1[y]*v 2[x]); return; }

void main(void){ cosTable=(BYTE*)GlobalAlloc(0,256); texture=(BYTE*)GlobalAlloc(GMEM_ZEROINIT,4*textureSize*textureSize); texture2=(BYTE*)GlobalAlloc(GMEM_ZEROINIT,4*textureSize*textureSize); for(ticks=0;ticks<256;ticks++){ cosTable[ticks]=32+32*cos(ticks*2*3.14/256); } ShowCursor(0); hDC=GetDC(CreateWindowEx(WS_EX_TOPMOST,"edit",NULL,WS_VISIBLE|WS_POPU P,0,0,maxX=GetSystemMetrics(SM_CXSCREEN),maxY=GetSystemMetrics(SM_CYSCREEN),0,0, 0,0)); SetPixelFormat(hDC,ChoosePixelFormat(hDC,&pfd),&pfd); wglMakeCurrent(hDC,wglCreateContext(hDC)); glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); fH=tan(45.0/360.0*3.14)*0.1; fW=fH*maxX/(maxY-300.0); FMUSIC_MODULE* music; glFrustum(-fW,fW,-fH,fH,0.1,100.0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); SelectObject(hDC,CreateFont(-12,-12,120,0,FW_BOLD,1,0,0,0,0,0,0,0,"tahoma& quot;)); wglUseFontBitmaps(hDC,0,255,0); glPixelTransferf(GL_ALPHA_BIAS,0.1); glMatrixMode(GL_MODELVIEW); glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHT0); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,1); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); glEnable(GL_DEPTH_TEST); //glEnable(GL_BLEND); glEnable(GL_NORMALIZE); glBlendFunc(GL_SRC_ALPHA,GL_ONE); FSOUND_Init(44100,32,0); FMUSIC_PlaySong(music=FMUSIC_LoadSongEx((char*)xm,0,sizeof(xm),FSOUND_LOADMEMOR Y,0,0)); //FMUSIC_SetInstCallback(music,cbCube,1); glViewport(0,150,maxX,maxY-300); while(!GetAsyncKeyState(VK_ESCAPE)){ k=GetTickCount(); if(k!=ticks){ ticks=k; if((zCube-=0.01)<0.0){ zCube=0.0; } angle3=time3; angle4=time4; for(x=0,ofs=0;x<textureSize;x++){ angle1=time1; angle2=time2; for(y=0;y<textureSize;y++,ofs+=4){ texture[ofs]=cosTable[(2*angle2+55)&255]+cosTable[(angle3-1)&255]; texture[ofs+1]=cosTable[(2*angle1+100)&255]+cosTable[(angle4-25)&25 5]; texture[ofs+2]=cosTable[(angle2-10)&255]+cosTable[(4*angle4+51)&255 ]; texture[ofs+3]=2*(x^y); angle1=angle1+2; angle2=angle2-1; } angle3=angle3-1; angle4=angle4+2; } time1=time1+2; time2=time2-1; time3=time3-2; time4=time4+1; for(x=0,ofs=0;x<textureSize;x++){ for(y=0;y<textureSize;y++,ofs+=4){ texture[ofs]=2*cosTable[(texture[ofs]+angle4)&255]+cosTable[(texture[of s]+192+angle3+angle1)&255];; texture[ofs+1]=3*cosTable[(texture[ofs-2]+64+angle1-angle3)&255]; texture[ofs+2]=3*cosTable[(texture[ofs]+angle1+angle2)&255]; angle1=angle1+2; angle2=angle2-3; } angle3=angle3-1; angle4=angle4+2; }

glTexImage2D(GL_TEXTURE_2D,0,4,textureSize,textureSize,0,GL_RGBA,GL_UNSIGNED_ BYTE,texture); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-1.0,-0.5,-3.0+zCube); glColor4f(10.0,10.0,0.0,10.0);

glBegin(GL_QUADS); for(y=1,ofs=0;y<textureSize-1;y++){ for(x=0;x<textureSize;x++,ofs+=4){ float x1=(float)x/mapSteps; float y1=(float)texture[ofs]/yScale; float z1=(float)y/mapSteps; float x2=(float)(x+1)/mapSteps; float y2=(float)texture[ofs+textureSize*4]/yScale; float z2=(float)(y+1)/mapSteps; float y3=(float)texture[ofs+4+textureSize*4]/yScale; float y4=(float)texture[ofs+4]/yScale; drawNormal(x1,y1,z1,x2,y2,z2,x2,y3,z2); glTexCoord2f((float)x/(float)textureSize,(float)y/(float)textureSize); glVertex3f(x1,y1,z1); glTexCoord2f((float)x/(float)textureSize,(float)(y+1)/(float)textureSize); glVertex3f(x1,y2,z2); glTexCoord2f((float)(x+1)/(float)textureSize,(float)(y+1)/(float)textureSiz e); glVertex3f(x2,y3,z2); glTexCoord2f((float)(x+1)/(float)textureSize,(float)y/(float)textureSize); glVertex3f(x2,y4,z1); } } glEnd();

glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glEnable(GL_BLEND); glColor4f(1.0,1.0,1.0,0.2); glRasterPos3f(0.4,-0.4,-1.0); glCallLists(19,GL_UNSIGNED_BYTE,"OpenGl+FMod testing"); //glDisable(GL_BLEND); glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHTING); SwapBuffers(hDC); } } ExitProcess(0); }

tylerdurden
()

Ни чего не понимаю, но хвалю! молодец, достижения в программинге это всегда хорошо! Не важно на каком уровне =)

PM85 ★★
()

Молодцом!
Сделай, что-нибудь по-круче, чем America's Army ;-)

kbps ★★★
()
Ответ на: комментарий от EViL

> > Что за IDE? > IDE, как уже сказали, Bluefish. > Угадайте какой дистр =)

наверно слака ))

GH
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.