|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Jan 04, 2008 6:19 pm Post subject: |
|
Ne C, ne C++ nav vienkārši. Tikai ar labu pieredzi tajos var abas valodas izmantot efektīvi. Iesācējam abas valodas var likties vienlīdz sarežģītas. Vienīgi C++'ā daudzas lietas var izdarīt drusku vienkāršāk un efektīvāk (rakstāmā koda ziņā). |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Fri Jan 04, 2008 6:22 pm Post subject: |
|
Runaajot par teemu C++ un C kurs vieglaaks- manupraat praatiigi ir nejaukt sev galvu, neteeereet laiku un maaciities to, kas ir vajadziigs - respektiivi C++ Un neviens nespiez ar varu lietot kaadu "gruutu" C++ fiichu tikai taapeec ka C++ taada ir. Ieguvumi : 1)aatraak apgsi vajadziigo valodu 2)Nejauksi sev galvu ar C/C++ sintaksi 3)C++ lielaaka zinaasanu baaze internetaa - veel aatraak apguusi nepieciesamo Nepielec man, kaapeec cilveekam vajadzeetu maaciities C un tad tikai C++
P.S Un veel labaak, no manis persooniigs ieteikums - raksti nevis garus filozofiskus paarspriedumus, bet saac rakstiit programmas. Galvenais ko vajag atcereeties - ja tu maacies kko jaunu, tad nekad nemaacies konkreetajai sfeerai kaadu vecu piegaajienu, nu piemeeram ja gribi zinaat C valodas tad maacies C++ , ja gribi 2D kko DX ziimeet - tad maacies D3D nevis DirectDraw utt. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Jan 04, 2008 7:08 pm Post subject: |
|
Quote: | Un neviens nespiez ar varu lietot kaadu "gruutu" C++ fiichu tikai taapeec ka C++ taada ir. |
Tas pats, ko es saku - jāmācās C++, bet pagaidām no tā labumiem vēl nekas nav vajadzīgs izņemot sīkumus
došu piemēru.
http://www.directxtutorial.com/Tutorial9/B-Direct3DBasics/dx9B1.aspx
Code: |
//KODU IZņēMU, TAS IR AIZ AUGSTāK NORāDīTā LINKA, LAPAS APAKšā, JāSPIEž "SHOW CODE"
|
parādiet man tur kautko sarežģītu no C++
vienīgi..
Code: |
d3ddev->BeginScene(); |
...šādas funkcijas, to izsaukumi!
neko vairāk sākumam no C++ nebūtu jāzina... _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
kkeemmss
Joined: 04 Jan 2007 Posts: 232 Location: Riga
|
Posted: Mon Jan 07, 2008 9:18 pm Post subject: |
|
Tas pats tutoriālis ir labs, un pliku logu ar izdevās uztaisīt, bet roblēmas notiek ejot fulscreenā
Code: | // this function initializes and prepares Direct3D for use
void initD3D(HWND hWnd)
{
d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface
D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information
ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use
d3dpp.Windowed = FALSE; // program fullscreen, not windowed
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // discard old frames
d3dpp.hDeviceWindow = hWnd; // set the window to be used by Direct3D
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; // set the back buffer format to 32-bit
d3dpp.BackBufferWidth = SCREEN_WIDTH; // set the width of the buffer
d3dpp.BackBufferHeight = SCREEN_HEIGHT; // set the height of the buffer
// create a device class using this information and the info from the d3dpp stuct
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&d3ddev);
return;
} |
un konkrētāk, kad šito izmainu
d3dpp.Windowed = FALSE;
un/vai pielieku klāt šito rindiņu
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
Tad es iegūstu šādu paziņojumu
Code: | Unhandled exception at 0x00411808 in projekts001.exe: 0xC0000005: Access violation reading location 0x00000000. |
un dzeltena bultiņa norāda uz d3ddev->Clear()
Code: | void render_frame(void)
{
// clear the window to a deep blue
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
...
|
kāds pateiks ko tas nozīmē un kā ar sito problemu tikt galā?
Edit:
lSCREEN_WIDTH un SCREEN_HEIGHT ir 640 X 480
Last edited by kkeemmss on Mon Jan 07, 2008 9:52 pm; edited 1 time in total |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon Jan 07, 2008 9:26 pm Post subject: |
|
tas noziimee, ka d3d nav korekti inicializeejies
njem ieliec kompii d3dx debug (ja vajag)
un panjem directx control panelii pamaini runtime no retail uz debug un aizvelc pa kreisi esosho sliideri gandriiz uz max
dx control panelim jaabuut ieksh SDK/... mapes kautkur
veelkas - paraadi, kas tev ir screen_width un screen_height _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Mon Jan 07, 2008 10:18 pm Post subject: |
|
"Access violation reading location 0x00000000." nozīmē, ka tiek lasīta 0 atmiņa. No tevis dotā koda, 0 varētu būt tikai 2 mainīgie - d3d un d3ddev. d3d droši vien tas nebūs, tāpēc noteikti d3ddev ir 0. Tas nozīmē, ka esi padevis CreateDevice nepareizus parametrus, vai arī uz sistēmas nav uzstādīts directx 9 (vienmēr vajag pārbaudīt rezultātu). _________________ long time; /* know C */ |
|
Back to top |
|
|
kkeemmss
Joined: 04 Jan 2007 Posts: 232 Location: Riga
|
Posted: Mon Jan 07, 2008 10:29 pm Post subject: |
|
darbā strādāju pie (no galvas neatceros) veca kompja ar integrētu 32mb videokarti.
direct x9 ir uzinstalēts, diagnostika saka ka vis kārtībā.
Ā un tas pats kods mājās uz pentium4, Radeon X1650 tiko aizgāja bez problēmām.
Laikam jau vainīgs būs vecais darba kompis. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Mon Jan 07, 2008 10:31 pm Post subject: |
|
100% ka taa
d3d'u nav jeegas laist ar reference/software device, aatrums buus mezhoniigs _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Jan 07, 2008 10:48 pm Post subject: |
|
kkeemmss: tad kad parādās tava "dzeltenā bultiņa", t.i. debugeris, tad uzbrauc ar peli uz d3ddev mainīgā un tev priekšā izleks tā vērtība. Ja tā ir 0 vai NULL, tas nozīmē, ka CreateDevice funkcija nav nostrādājusi.
Kā jau tev saka - vienmēr pārbaudi vai funkcija nostrādā vai nē. Nav jēga tālāk kodu izpildīt, ja kautkas nofeilo. |
|
Back to top |
|
|
kkeemmss
Joined: 04 Jan 2007 Posts: 232 Location: Riga
|
Posted: Tue Jan 08, 2008 10:47 am Post subject: |
|
Nu esmu atkal darbā pie: Celeron 600 MHz, 256 ram, 32Mb - intel(R) 82810E
un kā jau tas bij paredzams tad mājās iesākto turpināt nevarēšu, jo d3ddev value = 0x000000 ,un CreateDevice() nav nostrādājis.
Vai tai kodā ir kāds parametrs ko pamainīt, jeb vienīgais variants ir mainīt kompi? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Jan 08, 2008 11:24 am Post subject: |
|
Pamēģini BackBufferFormat'ā norādīt 16-bitu rgb tipu.
Vai arī SwapEffectu pamaini uz citiem veidiem. |
|
Back to top |
|
|
kkeemmss
Joined: 04 Jan 2007 Posts: 232 Location: Riga
|
Posted: Fri Jan 11, 2008 4:35 pm Post subject: |
|
Nu jau poliboni zīmējās, arī tekstūru klāt piedabūju, bet problēmas radās ar gaismu. sekojot tutoriālim lietoju sitādus FVF
Code: | struct CUSTOMVERTEX {FLOAT X, Y, Z; D3DVECTOR NORMAL; FLOAT U, V;};
#define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1) |
un vēlāk veidojot grafiku lietoju
Code: | CUSTOMVERTEX t_vert[] =
{
// side 1
{ -3.0f, 3.0f, -3.0f, 0, 0, -1, 0, 1, },
{ 3.0f, 3.0f, -3.0f, 0, 0, -1, 1, 1, },
{ -3.0f, -3.0f, -3.0f, 0, 0, -1, 0, 0, },
{ 3.0f, -3.0f, -3.0f, 0, 0, -1, 1, 0, },
// side 2
{ -3.0f, 3.0f, 3.0f, 0, 0, 1, 0, 1, },
{ -3.0f, -3.0f, 3.0f, 0, 0, 1, 0, 0, },
{ 3.0f, 3.0f, 3.0f, 0, 0, 1, 1, 1, },
{ 3.0f, -3.0f, 3.0f, 0, 0, 1, 1, 0, },
...
|
Bet mazliet neskaidrs paliek šitā daļa
{ -3.0f, 3.0f, 3.0f, 0, 0, 1, 0, 1, },
{ 3.0f, -3.0f, -3.0f, 0, 0, -1, 1, 0, },
Es saprotu ka tam ir kāda saistība ar poligona materiālu un gaismas atstarošanu. Vai kāds pāris vārdos var paskaidrot? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Jan 11, 2008 5:28 pm Post subject: |
|
tie 3 ir normaalvektora x y un z
tie noraada, no kura virziena gaisma buus visspozhaakaa uz sho vertexu
tiem jaabuut starp -1 un 1
vari paeksperimenteet pamainot x un y (1. un 2.), tam juutami vajadzeetu atsaukties uz vertexa gaishumu _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Jan 11, 2008 11:01 pm Post subject: |
|
snake5 wrote: | tie noraada, no kura virziena gaisma buus visspozhaakaa uz sho vertexu
tiem jaabuut starp -1 un 1 |
Kārtējie murgi...
Normāles vektors nenorāda nekādu virzienu, kur gaisma būs spožākā. Normāles vektors norāda poligona/virsmas novietojumu telpā - tam ir jābūt perpendikulāram pret poligonu/virsmu.
Tiem skaitļiem ir jābūt ne tikai starp -1..1, bet gan galvenākais ir tas, ka to kvadrātu summai ir jābūt vienādai ar 1, t.i. normāles vektora garumam jābūt ir 1. Ja šis nosacījums netiks ievērots tiks iegūti pavisam dīvaini efekti (ar nozīmi - nepareizi) ar apgaismojumu. Videokartes savos fixed-functionality (ne-šeideros) aprēķinos balstās uz fakta, ka normāles vektora garums ir 1. Tā iznāk optimālāk, jo nevajag rēķināt divas dārgas operācijas - kvadrātsakni un dalīšanu. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Jan 12, 2008 12:03 am Post subject: |
|
NAV TAM VEKTORAM JĀBŪT PERPENDIKULĀRAM PRET VIRSMU pirmkārt jau tāpēc, ka katram vertexam ir savs normālvektors
griez to vektoru kā gribi, pilnīgi vienalga ir, d3d no tā nemetīs errorus
priekš vektoru normalizēšanas ir renderstate: D3DRS_NORMALIZENORMALS
ar to viss salabojas automātiski.
kā es par gaismu domāju:
gaismas atrašanās vieta - vektors lv
vertexa pozīcija - vektors vv
normālvektors - vektors nv
tad
vektors vtt = lv - vv //vai vv - lv, īsti neatceros
normalizējam vtt
jo līdzīgāki ir vtt un nv vektori, jo vertexs ir gaišāks _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|