Brainer Napisano Lipiec 17, 2007 Zgłoś Share Napisano Lipiec 17, 2007 Witam. Po raz kolejny mam problem. Otóż mam taki kodzik: procedure TMainForm.DoRenderTerrain; const VertPos: arrayH^VWH]HH K JK KJK K Jf ĆćvCfW'F6W3'&ł5bEfW'FW((IQą(IQąĄX2, V3: Integer); var Normal: TVertex; begin Norm[HXX XXX XWKX5c%fV7F%7V'G&7BfW'F6W5c%fW'F6W5c59ąYŃĄ9((ą9Ą9ąlt(glBegin(GL_TRIANGLE_STRIP); glVertex3fv(@Vertices[V1][JN^XVJN^fW'F6W5c5łvVćBVćCŚ&Vvf\"ŁF5IąŃź(hŃź5IąŃź( begin for I := 0 to 3 do begin VerticWVHH WVJHX][ X^NfW'F6W5ł%ŁfW'E5ł&W6WF5M(YŃm%ult5Ńm`ŹYŃAm%ul, Z + VertPos[i][1]] end; RenderTriangle(0, 1, 3N[X[JKĘN[[ Dodam od razu, że nie jestem jego autorem, a jedynie troszkę go przerobiłem. Problemem jest nakładanie tekstury na tak wyrenderowany teren. Eksperymentowałem z różnymi ustawieniami koordynat, ale i tak teren wygląda trochę dziwnie. Chciałbym was prosić też o podanie lepszego rozwiązania na renderowanie terenu, bo ten kod przedstawiony przeze mnie powoduje, że teren jest strasznie kanciasty. Z góry dzięki za wasz trud i pomoc. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Lipiec 17, 2007 Zgłoś Share Napisano Lipiec 17, 2007 Witam! Pewnie masz na myśli cieniowanie ... widzę ze tu normalne są obliczane z iloczynu wektorowego a to nie dość że powolna metoda to jeszcze trzeba na końcu uśredniać normalne. Nie pamiętam dokładnie jak się liczyło normalne dla terenu wiem tylko że w perełkach programowania jest ładny opis (trzeba by sprawdzić spis treści bo nie wiem I czy III). Wiem że mało konkretna ta moja odpowiedź ale nie mam tu swojego magicznego lapciaka, znowu piłem odpoczywam na wakacjach Pozdrawiam www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
Gifanonim Napisano Lipiec 17, 2007 Zgłoś Share Napisano Lipiec 17, 2007 co do textur to ja tu niewidze nic na ten temat w kodzie jaki zapodałeś, wiec nie wiem jaki masz problem. co do kanciastego terenu to rozwiązanie jest proste im więcej pkt kontrolnych (wierzchołków) tym łagodniej wychodzi teren poczytaj najlepiej o krzywych i płaszczyznach Beziera "Bogowie to bugi ludzkich umysłów" Gifanonim ® Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 17, 2007 Autor Zgłoś Share Napisano Lipiec 17, 2007 co do textur to ja tu niewidze nic na ten temat w kodzie jaki zapodałeś, wiec nie wiem jaki masz problem. co do kanciastego terenu to rozwiązanie jest proste im więcej pkt kontrolnych (wierzchołków) tym łagodniej wychodzi teren poczytaj najlepiej o krzywych i płaszczyznach Beziera Moją prośbą było podanie sposobu na prawidłowe koordynaty tekstur, więc się nie dziw, że tam nic nie ma. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 17, 2007 Autor Zgłoś Share Napisano Lipiec 17, 2007 Dobra, wyjaśnię lepiej na czym polega problem. Macie tutaj screena z mojego programu: Jak widać, strasznie widoczne są trójkąty, z których składa się teren oraz tekstura nie wygląda za dobrze. Moglibyście poradzić mi, co mam zmienić, żeby to poprawić? .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
krajew4 Napisano Lipiec 17, 2007 Zgłoś Share Napisano Lipiec 17, 2007 Masz jedna normalna dla jednego trojkata, a potrzeba jedna normalna dla kazdego wierzcholka (i wlacz cieniowanie) (tez z tym mialem kiedys problem ;p) My life for Aiur! Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 17, 2007 Autor Zgłoś Share Napisano Lipiec 17, 2007 Masz jedna normalna dla jednego trojkata, a potrzeba jedna normalna dla kazdego wierzcholka (i wlacz cieniowanie) (tez z tym mialem kiedys problem ;p) Dzięki, poprawiłem. Ale dalej wygląda źle. Oto poprawiony kodzik: var Normal: TVertex; begin Normal := CalcPlaneNX[ XWKXKXJNX6gbć&łv&VvtE$tU2RŁfW'FmXultź5IąŃ(Ą5IąŃYŃces[V1][2]) / MapResolution; glTexCoord2f(u, v); ^XWVJNHHXVH&W6WFbŁ&W6WFfW'F6W5c%ł%ź5IąŃ(ąQ Ą(ąYŃ@Vertices[V2][0]); u := Vertices[V3][0] / MapResolutiH X][HXVJHX]vFW6&C&bRbvfW'FW6gbfW'F6W5cult(ą(( .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 18, 2007 Autor Zgłoś Share Napisano Lipiec 18, 2007 Hej! Poradziłem już sobie z tym. Temat można zamknąć. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 18, 2007 Zgłoś Share Napisano Lipiec 18, 2007 to wrzuc rozwiazanie, moze komus sie przyda Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 18, 2007 Autor Zgłoś Share Napisano Lipiec 18, 2007 to wrzuc rozwiazanie, moze komus sie przyda Wątpię, żeby to było przydatne, ale niechaj będzie. A więc tak, napisałem sobie taką klasę: { .: TTerrain :. } TTerrain = class(TObject) protecte]]HX][BZY^H^H6ćvĆSć&3'&b'&bEFW'&fW'FWMąQMąMMą(ą11( GotDisplayList: Boolean; procedure DrawManually(); YHYP]X ]X]X NYH[7VĆFTć&2&6VGW&R6WE6ŚRrFVvW\"V&(AąąŃ(]Ń!Ą%Ń(( constructor Create(const FileName: String; GridScale: SinHHKX[[N[HHL^T[N6ćvĆRFW7G'V7F\"FW7G&fW'&FS&I((VŹis,\"zZęhft:j(2óĘnbśVŹ\"ruę2u#,\"r'Łz^V7ŚĘĘrdśźŁ<(*k!Łjz+gyŚ(QQYŃ(QQYŃlt Single; 'ćjl^i2ui' { TTerrain } procedure TTerrain.CalculateNormals; var X,KVK]K][YZ[^ĆV6ćvĆSŚ&Vvf\"ŁFVvBÓFf\"Ńź]Ńź((Ylt(Ylt:= 0.0; V[2] := 0.0; for YY := -1 to 1 do Y[Y H VH H H[ H VH ZY HVF&vWEŁV6PbŹedąŃĄ(ŃŃd(ą( targetY := Height -1; for XX := -1 to 1 doY H[ VH H[&VvbfwCłćBfCvŃŃĄ(ŃŃ``Źa`(ą( if (X + XX < 0) then targetX H[B]HYLNŁVvG5F&vWEF&vWEÓełtYlta` (YltYlted ( end; end; V[1] := 1 / 3; Len := Sqrt(H H WH WH H JNY [ FV&VvełŁełĆVełYltź1(YltYltź1(((Normals[X, Y] := V; end; end; constructor TTerrain.CreaJ[S[YN[Y[KX[[K^U66ĆS6ćvĆRf $D&FŚ&VvćW&FVB7&VF((YMąYŃąMą(QMąQŃMą(otDisplayList := False; GridSize := GridScale; try TH]XX]J NTYQ[J[S[YJNĆDg&&F$fćĆ$g&VRVćCŚVćCŃŃQQŃ)(MŃM(ŃisplayList then glDeleteLists(DisplayList, 1); inheriYJ N[YHZ[]ÓX[X[NFVvW#r6ćvĆSŚ&VvrŁvGF\"M(!Ą!ĄźM((dŃź!ight -2 do begin glBegin(GL_TRIANGLE_STRIP); forHYLHY[^GFE66ĆRvGFE66ĆRvć&6gbć&ąm`et(ąYŃĄ`M!!ĄŃm`Y] * VScale, Y * GridSize - Hh); glTexCoord2f(X / WY [K H JHY [JNX[ć&5vfW'FW6bw&E6ŚRrĄŃm`dŹtYMą(ĄdŹM!; end; glEnd(); end; end; procedure TTerrain.LoYP]X ]X]X NN[YFT'&Ś&Vv&FVf&BŁc#F&C6WE6ŚR&Ń]Ń Ń!Ą(d Ń!Ąo 0 do begin PB := Bitmap.ScanLine[Y]; for X := 0 ]XYLHZY]XZYLHHWH%2%%2%5scS( ąąŃ9ą)()QQI begin if GotDisplayList then glCallList(DisplayList) [bY[^SH[ĘJN]Ó7BF7ĆĆ7Bt4RG&tVĆvVćD((Ńą1Q()()Qerrain.SetSize(W, H: Integer); begin Width := W; Height H][ ZYYZY N][ X[2vGFVvBŚVćCwĄśóĄ^#jJ0Ęk:krŚźn'Ł^6zIZĄh',ćui' procedure TMainForm.DoRenderTerrain; begin glBindTexture(ÓVTWX^ N[]YM N'&&VćFW\"ŚVćC I to w zasadzie tyle. Oczywiście to jest tylko bardzo banalny przykład i można tutaj bardzo wiele dodać, ale do prostych programów sprawdza się wyśmienicie! .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.