Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 08:48

Foren-Übersicht » English » English Programming Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Transparent Objects
BeitragVerfasst: Do Sep 16, 2004 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 21, 2004 22:39
Beiträge: 360
Wohnort: UK, Scotland
Im wondering if faces can become totaly transparent(doesn't matter what way u look at them) by some opengl settings without transparency. The reason i wonder is due to some RTCW(Return To Castle Wolfenstine) maps having "missing" features visualy. I know its related to some shaders (Quake 3 shaders not Opengl, Q3 shaders control the GL effects put on the textures and how the textures(and the face) should act, i.e Flags should destort like they are in the wind).

Below is a pic with shaders disabled and enabled.

EDIT: it doesn't seem to be: GL_CULL_FACE, GL_ALPHA_TEST, GL_DEPTH_TEST, glDepthMask, GL_BLEND.


Dateianhänge:
Dateikommentar: Shaders Disabled
_0075.jpg [163.16 KiB]
47-mal heruntergeladen
Dateikommentar: Shaders Enabled
_0076.jpg [150.39 KiB]
47-mal heruntergeladen

_________________
Free Map Editor - Game Requirements - Stucuk.Net
-Stu
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 21, 2004 22:39
Beiträge: 360
Wohnort: UK, Scotland
Surface Shader Code:
Code:
  1.  
  2. procedure TQuake3BSP.RenderSurfaceShader(faceIndex, shaderId: integer);
  3. var shader : TShader;
  4.     i, texId, planeIdx : integer;
  5.     Face : PBSPFace;
  6. begin
  7.   try
  8.   Face := @Faces[faceIndex];
  9.   shader := ShaderManager[shaderId];
  10.   // culling
  11.   if shader.Cull = GL_NONE then
  12.     glDisable(GL_CULL_FACE)
  13.   else begin
  14.     glEnable(GL_CULL_FACE);
  15.     glCullFace(shader.cull);
  16.   end;
  17.  
  18.   if multiTexture then begin
  19.     glActiveTexture(GL_TEXTURE1);
  20.     glDisable(GL_TEXTURE_2D);
  21.  
  22.     glActiveTexture(GL_TEXTURE0);
  23.   end;
  24.   glDisable(GL_TEXTURE_2D);
  25.  
  26.   glEnable(GL_COLOR);
  27.   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  28.   glColor3ub(255,255,255);
  29.  
  30.   // prepare data for global deform operations - but texture coordinates must restored for each layer !!!!!
  31.  
  32.    for i := 0 to face.numMeshVerts-1 do
  33.     inputBuffer[i] := Vertices[Face.startVertIndex+MeshVertices[face.meshVertIndex+i]];
  34.  
  35.   SetVertexCoords(shaderId, face.numMeshVerts);
  36.   glVertexPointer(3, GL_FLOAT, sizeof(TBSPVertex), @inputBuffer[0].Position);
  37.  
  38.   if LockArrays then glLockArraysEXT(0, Face.numMeshVerts);
  39.  
  40.   if shader.numOfLayers > 0 then begin
  41.     for i := 0 to shader.numOfLayers-1 do begin
  42.       if (ShaderManager[shaderId].Layers[i].numOfrgbGen > 0) or (Face.FaceType = FACE_MESH) then begin
  43.         SetVertexColors(shaderId, i, face.numMeshVerts);
  44.         glColorPointer(4, GL_UNSIGNED_BYTE, 0, @colorBuffer[0]);
  45.         glEnableClientState(GL_COLOR_ARRAY);
  46.       end
  47.       else
  48.         glDisableClientState(GL_COLOR_ARRAY);
  49.       if not pause then
  50.       SetTextureCoordinates(shaderId, i, face.numMeshVerts);
  51.  
  52.       if multiTexture then
  53.         glClientActiveTexture(GL_TEXTURE0);
  54.       glTexCoordPointer(2, GL_FLOAT, 0,  @texCoordBuffer[0]);
  55.  
  56.       if (shader.Layers[i].UseLightmap) then begin
  57.         if not multiTexture then begin
  58.           texId := 0;
  59.         end
  60.         else begin
  61.           glClientActiveTexture(GL_TEXTURE0);
  62.           glTexCoordPointer(2, GL_FLOAT, sizeof(TBSPVERTEX), @inputBuffer[0].LightmapCoord);
  63.           if (face.lightmapId > -1) and (Lightmaps[face.lightmapID] > -1) then
  64.             texId := Lightmaps[face.lightmapID]
  65.           else
  66.             texId := 0;
  67.         end;
  68.       end
  69.       else begin
  70.         texId := shader.Layers[i].TextureId[shader.Layers[i].curTexture];
  71.       end;
  72.       glEnable(GL_TEXTURE_2D);
  73.       glBindTexture(GL_TEXTURE_2D, texId);
  74.  
  75.       shaderManager.SetState(shaderId, i );
  76.  
  77.       glDrawArrays(GL_TRIANGLES, 0, Face.numMeshVerts);
  78.       SetDefaults;
  79.     end;
  80.   end;
  81.   if LockArrays then glUnlockArraysEXT();
  82.   SetDefaults;
  83.   if (numOfEffects > 0) and (Faces[faceIndex].effect > -1) and (not simpleRender) and (GetCvarB('Cg_Fog')) then begin
  84.     //RenderFogFace(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, BrushSides[Brushes[Effects[Faces[faceIndex].effect].brushIndex].brushside].plane );
  85.     //RenderFog(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, BrushSides[Effects[Faces[faceIndex].effect].visibleSide].plane);
  86.     if (Effects[Faces[faceIndex].effect].visibleside >= 0) then
  87.       planeIdx := BrushSides[Brushes[Effects[Faces[faceIndex].effect].brushIndex].brushside + Effects[Faces[faceIndex].effect].visibleside].plane
  88.     else
  89.       planeIdx :=  -1;
  90.     RenderFog(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, planeIdx);
  91.     SetDefaults;
  92.   end;
  93.   except
  94.     lastError := glGetError();
  95.     lastErrorString := gluErrorString(lastError);
  96.     {$IfDef HELIOS_CONSOLE}
  97.     //if ShowDetails then
  98.     Cons.AddIfDifferent('RenderSurfaceShader ' + lastErrorString + ' ' + IntToStr(faceIndex));
  99.     {$EndIf}
  100. //    if DumpErrors then AddError('RenderSurfaceShader ' + lastErrorString);
  101.   end;
  102.  
  103. end;
  104.  


Surface Code:
Code:
  1.  
  2. procedure TQuake3BSP.RenderSurface(faceIndex: integer);
  3. var Face : PBSPFace;
  4.     planeIdx : integer;
  5. begin
  6.   try                                  
  7.     Face := @Faces[faceIndex];
  8.     glVertexPointer(3, GL_FLOAT, sizeof(TBSPVertex), @Vertices[Face.startVertIndex].Position);
  9.  
  10.     if multiTexture then begin
  11.       glClientActiveTexture(GL_TEXTURE1);
  12.       glDisableClientState(GL_COLOR_ARRAY);
  13.       glTexCoordPointer(2, GL_FLOAT, sizeof(tBSPVertex), @Vertices[Face.startVertIndex].LightmapCoord);
  14.       glClientActiveTexture(GL_TEXTURE0);
  15.     end;
  16.     glTexCoordPointer(2, GL_FLOAT, sizeof(tBSPVertex), @Vertices[Face.startVertIndex].TextureCoord);
  17.  
  18.     if Face.FaceType = FACE_MESH then begin
  19.       glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(TBSPVertex), @Vertices[Face.startVertIndex].Color);
  20.       glEnableClientState(GL_COLOR_ARRAY);
  21.     end
  22.     else
  23.       glColor3ub(255,255,255);
  24. //    if LockArrays then glLockArraysEXT(0, Face.numMeshVerts);
  25.  
  26.     BindTextures(Face.textureID, Face.lightmapID); //Faces[faceIndex].lightmapID);
  27.     glDrawElements(GL_TRIANGLES, face.numMeshVerts, GL_UNSIGNED_INT, @MeshVertices[face.meshVertIndex]);
  28.     if LockArrays then glUnlockArraysEXT();
  29.     SetDefaults;
  30.     if (numOfEffects > 0) and (Faces[faceIndex].effect > -1) and (not SimpleRender) and GetCvarB('Cg_Fog') then begin
  31.       //RenderFogFace(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, BrushSides[Brushes[Effects[Faces[faceIndex].effect].brushIndex].brushside].plane );
  32.       //RenderFog(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, 0);
  33.       if (Effects[Faces[faceIndex].effect].visibleside >= 0) then
  34.         planeIdx := BrushSides[Brushes[Effects[Faces[faceIndex].effect].brushIndex].brushside + Effects[Faces[faceIndex].effect].visibleside].plane
  35.       else
  36.         planeIdx :=  -1;
  37.       RenderFog(faceIndex, Effects[Faces[faceIndex].effect].shaderIndex, planeIdx);
  38.       SetDefaults;
  39.     end;
  40.   except
  41.     lastError := glGetError();
  42.     lastErrorString := gluErrorString(lastError);
  43.     {$IfDef HELIOS_CONSOLE}
  44.     if ShowDetails then
  45.     Cons.AddIfDifferent('RenderSurface ' + lastErrorString + ' ' + IntToStr(faceIndex));
  46.     {$EndIf}
  47. //    if DumpErrors then AddError('RenderSurface ' + lastErrorString);
  48.   end;
  49. end;
  50.  


Misc used by Surface Shader:
Code:
  1.  
  2. procedure TQuake3BSP.SetVertexCoords(shaderId, numOfVerts : integer);
  3. var shader : TShader;
  4.     i, j, nv : integer;
  5.     args : TWaveFunc;
  6.     startoff, off, wavesize, inc : single;
  7.     p, v, middle, d, h : TVector3f;
  8.     st : TVector2f;
  9. const speed = 2.0;
  10. begin
  11.   shader := FShaderManager[shaderId];
  12.   if shader.numOfDeformVertexes > 0 then begin
  13.     startoff := 0;
  14.     wavesize := 1;
  15.     for i := 0 to shader.numOfDeformVertexes-1 do begin
  16.       case shader.DeformVertexes[i].deformType of
  17.         DEFORMVERTEXES_WAVE :
  18.           begin
  19.             args.func := enWave(trunc(shader.DeformVertexes[i].values[1]));
  20.             args.base := shader.DeformVertexes[i].values[2];
  21.             args.amp  := shader.DeformVertexes[i].values[3];
  22.             wavesize := shader.DeformVertexes[i].values[0];
  23.             startoff := shader.DeformVertexes[i].values[4];
  24.             args.freq := shader.DeformVertexes[i].values[5];
  25.             nv := numOfVerts;
  26.             for j := 0 to numOfVerts-1 do begin
  27.               v := inputBuffer[j].normal;
  28.               p := inputBuffer[j].Position; // buffer it
  29.               off := (p.x+p.y+p.z) / waveSize;
  30.               args.phase := startoff + off;
  31.               inc := Eval(args);
  32.               inputBuffer[j].Position.x := p.x + inc*v.x;
  33.               inputBuffer[j].Position.y := p.y + inc*v.y;
  34.               inputBuffer[j].Position.z := p.z + inc*v.z;
  35.             end;
  36.           end;
  37.         DEFORMVERTEXES_NORMAL :
  38.           begin
  39.             args.func := enWave(trunc(shader.DeformVertexes[i].values[1]));
  40.             args.base := shader.DeformVertexes[i].values[2];
  41.             args.amp  := shader.DeformVertexes[i].values[3];
  42.             args.freq := shader.DeformVertexes[i].values[4];
  43.             nv := numOfVerts;
  44.             for j := 0 to numOfVerts-1 do begin
  45.               v := inputBuffer[j].normal;
  46.               p := inputBuffer[j].Position; // buffer it
  47.               off := (p.x+p.y+p.z) / (speed*waveSize);
  48.               args.phase := startoff + off;
  49.               inc := Eval(args);
  50.               inputBuffer[j].Normal.x := p.x + inc*v.x;
  51.               inputBuffer[j].Normal.y := p.y + inc*v.y;
  52.               inputBuffer[j].Normal.z := p.z + inc*v.z;
  53.             end;
  54.           end;
  55.         DEFORMVERTEXES_MOVE :
  56.           begin
  57.             args.func := enWave(trunc(shader.DeformVertexes[i].values[3]));
  58.             args.base := shader.DeformVertexes[i].values[4];
  59.             args.amp  := shader.DeformVertexes[i].values[5];
  60.             args.phase := shader.DeformVertexes[i].values[6];
  61.             args.freq := shader.DeformVertexes[i].values[7];
  62.             for j := 0 to numOfVerts-1 do begin
  63.               inc := Eval(args);
  64.               inputBuffer[j].position.x := inputBuffer[j].position.x + inc*shader.DeformVertexes[i].values[0];
  65.               inputBuffer[j].position.y := inputBuffer[j].position.y + inc*shader.DeformVertexes[i].values[1];
  66.               inputBuffer[j].position.z := inputBuffer[j].position.z + inc*shader.DeformVertexes[i].values[2];
  67.             end;
  68.           end;
  69.         DEFORMVERTEXES_AUTOSPRITE :
  70.           begin
  71.             (*
  72.             glGetFloatv(GL_MODELVIEW_MATRIX, @cam_mat);
  73.             right := Make3DVector_f(cam_mat[0], cam_mat[4], cam_mat[8]);
  74.             up := Make3DVector_f(cam_mat[1], cam_mat[5], cam_mat[9]);
  75.             right := vec_normalize(right);
  76.             up := vec_normalize(up);
  77.             middle := Make3DVector_f(0,0,0);
  78.             // Compute middle of quad
  79.             for j := 0 to numOfVerts-1 do begin
  80.               middle.X := middle.X + inputBuffer[j].position.x;
  81.               middle.Y := middle.Y + inputBuffer[j].position.y;
  82.               middle.Z := middle.Z + inputBuffer[j].position.z;
  83.             end;
  84.             middle := vec_scale(middle, 1/numOfVerts);
  85.             //glColor3ub(255, 0, 0);
  86.             //glPointSize(2);
  87.             // middle point
  88.             //glBegin(GL_POINTS);
  89.             //  glVertex3f(middle.X, middle.y, middle.Z);
  90.             //glEnd;
  91.             //glPointSize(4);
  92.             //glColor3ub(0, 0, 255);
  93.             //glBegin(GL_POINTS);
  94.             // world points
  95.             for j := 0 to numOfVerts-1 do begin
  96.               p.x := middle.X + (inputBuffer[j].Position.X - middle.x);
  97.               p.y := middle.y + (inputBuffer[j].Position.y - middle.y);
  98.               p.z := middle.z + (inputBuffer[j].Position.z - middle.z);
  99.            //   glVertex3f(p.X, p.y, p.Z);
  100.             end;
  101.             //glEnd;
  102.             //glPointSize(8);
  103.             //glColor3ub(255, 255, 0);
  104.             //glBegin(GL_POINTS);
  105.             // billboard points
  106.             for j := 0 to numOfVerts-1 do begin
  107.               dx := (inputBuffer[j].Position.X - middle.x);
  108.               dy := (inputBuffer[j].Position.y - middle.y);
  109.               dz := (inputBuffer[j].Position.z - middle.z);
  110. {              if (dx < 0) or (dz < 0) then
  111.                 if (dx < 0) and (dz < 0) then
  112.                   dx := -Sqrt(dx*dx + dz*dz)
  113.                 else
  114.                   dx :=  Sqrt(dx*dx + dz*dz)
  115.               else
  116.                 dx := Sqrt(dx*dx + dz*dz);}
  117.               p := vec_add(vec_scale(up, dy), vec_scale(right, dx));
  118.               p := vec_add(middle, p);
  119.             //  glVertex3f(p.X, p.y, p.Z);
  120.               inputBuffer[j].Position := p;
  121.             end;
  122.             //glEnd;
  123.             //glColor3ub(255, 255, 255);
  124.             *)
  125.           end;
  126.         DEFORMVERTEXES_BULGE :
  127.           begin
  128.             args.func := WF_SIN;
  129.             args.base := 0;
  130.             args.amp  := shader.DeformVertexes[i].values[1];
  131.             args.freq := 1/(speed*shader.DeformVertexes[i].values[0]);
  132.             nv := numOfVerts;
  133.             for j := 0 to numOfVerts-1 do begin
  134.               st := inputBuffer[j].TextureCoord;
  135.               v := inputBuffer[j].normal;
  136.               p := inputBuffer[j].Position; // buffer it
  137.               args.phase := st.X*speed*shader.DeformVertexes[i].values[2];
  138.               inc := Eval(args);
  139.               inputBuffer[j].Position.x := p.x + inc*v.x;
  140.               inputBuffer[j].Position.y := p.y + inc*v.y;
  141.               inputBuffer[j].Position.z := p.z + inc*v.z;
  142.             end;
  143.           end;
  144.       end;
  145.     end;
  146.   end;
  147. end;
  148.  
  149. procedure TQuake3BSP.SetVertexColors(shaderId, stageId, numOfVerts : integer);
  150. var shader : TShader;
  151.     i, j : integer;
  152.     c : integer;
  153. begin
  154.   shader := FShaderManager[shaderId];
  155.   for j := 0 to numOfVerts-1 do begin
  156.     colorBuffer[j, 0] := inputBuffer[j].Color[0]; // red
  157.     colorBuffer[j, 1] := inputBuffer[j].Color[1]; // green
  158.     colorBuffer[j, 2] := inputBuffer[j].Color[2]; // blue
  159.     colorBuffer[j, 3] := inputBuffer[j].Color[3]; // gamma
  160.   end;
  161.  
  162.   if shader.numOfLayers > 0 then begin
  163.     if shader.Layers[stageId].numOfrgbGen > 0 then begin
  164.       case shader.Layers[stageId].rgbGen[0].rgbGType of
  165.         rgbGen_IdentityLightning :
  166.           begin
  167.             for j := 0 to numOfVerts-1 do begin
  168.               colorBuffer[j, 0] := 127; // red
  169.               colorBuffer[j, 1] := 127; // green
  170.               colorBuffer[j, 2] := 127; // blue
  171.               colorBuffer[j, 3] := 255; // gamma
  172.             end;
  173.           end;
  174.         rgbGen_Identity :
  175.           begin
  176.             for j := 0 to numOfVerts-1 do begin
  177.               colorBuffer[j, 0] := 255; // red
  178.               colorBuffer[j, 1] := 255; // green
  179.               colorBuffer[j, 2] := 255; // blue
  180.               colorBuffer[j, 3] := 255; // gamma
  181.             end;
  182.           end;
  183.         rgbGen_Wave :
  184.           begin
  185.             c := Round(255*Eval(shader.Layers[stageId].rgbGen[0].Wave));
  186.             if c < 0 then c := 0;
  187.             if c > 255 then c := 255;
  188.             for j := 0 to numOfVerts-1 do begin
  189.               colorBuffer[j, 0] := c;   // red
  190.               colorBuffer[j, 1] := c;   // green
  191.               colorBuffer[j, 2] := c;   // blue
  192.               colorBuffer[j, 3] := 255; // gamma
  193.             end;
  194.           end;
  195.        else begin
  196.         for j := 0 to numOfVerts-1 do begin
  197.           colorBuffer[j, 0] := inputBuffer[j].Color[0]; // red
  198.           colorBuffer[j, 1] := inputBuffer[j].Color[1]; // green
  199.           colorBuffer[j, 2] := inputBuffer[j].Color[2]; // blue
  200.           colorBuffer[j, 3] := inputBuffer[j].Color[3]; // gamma
  201.         end;
  202.        end;
  203.       end;
  204.     end
  205.     else begin
  206.       // no rgbgen use vertex colors
  207.       for j := 0 to numOfVerts-1 do begin
  208.         colorBuffer[j, 0] := inputBuffer[j].Color[0]; // red
  209.         colorBuffer[j, 1] := inputBuffer[j].Color[1]; // green
  210.         colorBuffer[j, 2] := inputBuffer[j].Color[2]; // blue
  211.         colorBuffer[j, 3] := inputBuffer[j].Color[3]; // gamma
  212.       end;
  213.     end;
  214.   end;
  215. end;
  216.  
  217. procedure TQuake3BSP.SetTextureCoordinates(shaderId, stageId, numOfVerts : integer);
  218. var i, j : integer;
  219.     shader : TShader;
  220.     dir : TVector3f;
  221.     // tcmod
  222.     angulo, cost, sint, factor : single;
  223.     v, scroll : TVector2f;
  224.     v2 : TVector3f;
  225.     now : single;
  226.     frame : integer;
  227. begin
  228.   shader := FShaderManager[shaderId];
  229. (*  for j := 0 to numOfVerts-1 do
  230.     texCoordBuffer[j] := inputBuffer[j].TextureCoord;
  231. *)
  232.   if shader.numOfLayers > 0 then begin
  233.     //Animation
  234.     if shader.Layers[StageID].animFreq <> 0 then begin
  235.       frame := Trunc(gTimer.TotalTime *shader.Layers[StageID].animFreq) mod shader.Layers[StageID].numOfTextures;
  236.       if frame >= shader.Layers[StageID].numOfTextures then
  237.         frame := 0;
  238.       Shader.Layers[StageID].curTexture := frame;
  239.     end
  240.     else
  241.       Shader.Layers[StageID].curTexture := 0;
  242.     // tcGen  ******************************************************************
  243.     case shader.Layers[stageId].tcGen of
  244.       TCGEN_LIGHTMAP :
  245.         begin
  246.           for j := 0 to numOfVerts-1 do
  247.             texCoordBuffer[j] := inputBuffer[j].LightmapCoord;
  248.         end;
  249.       TCGEN_ENVIRONMENT :
  250.         begin
  251.           // wrong calc !!!!
  252.           for j := 0 to numOfVerts-1 do begin
  253.             dir := SubtractVector(inputBuffer[j].Position, Camera.Position);//vec_sub(inputBuffer[j].Position, Camera.Position);
  254.             //dir := Normalize(dir);//vec_normalize(dir);
  255.             Normalize(dir);
  256. {            dir.x := dir.x + inputBuffer[j].Normal.X;
  257.             dir.y := dir.y + inputBuffer[j].Normal.Y;
  258.             texCoordBuffer[j].X := dir.x;
  259.             texCoordBuffer[j].Y := dir.y;}
  260.             dir.x := dir.x + inputBuffer[j].Normal.X;
  261.             dir.z := dir.z + inputBuffer[j].Normal.z;
  262.             texCoordBuffer[j].X := dir.x;
  263.             texCoordBuffer[j].y := dir.z;
  264.  
  265.           end;
  266.  
  267.         end;
  268.       else
  269.         for j := 0 to numOfVerts-1 do
  270.           texCoordBuffer[j] := inputBuffer[j].TextureCoord;
  271.     end;
  272.  
  273.     // tcMod *******************************************************************
  274.     if shader.Layers[stageId].numOftcMods > 0 then begin
  275.       for i := 0 to numOfVerts-1 do begin
  276.         for j := 0 to shader.layers[stageId].numOftcMods-1 do begin
  277.           case shader.Layers[stageId].tcMods[j].modType of
  278.             TCMOD_ROTATE :
  279.               begin
  280.                 angulo := shader.Layers[stageId].tcMods[j].Values[0]*gTimer.TotalTime/M_180_PI;
  281.                 cost := cos(angulo);
  282.                 sint := sin(angulo);
  283.                 v := texCoordBuffer[i];
  284.                 v.x := v.x - 0.5;
  285.                 v.y := v.y + 0.5;
  286.                 texCoordBuffer[i].x := v.x*cost - v.y*sint + 0.5;
  287.                 texCoordBuffer[i].y := v.x*sint + v.y*cost + 0.5;
  288.               end;
  289.             TCMOD_SCALE :
  290.               begin
  291.                 texCoordBuffer[i].x := (texCoordBuffer[i].x-0.5) * shader.Layers[stageId].tcMods[j].Values[0] + 0.5;
  292.                 texCoordBuffer[i].y := (texCoordBuffer[i].y-0.5) * shader.Layers[stageId].tcMods[j].Values[1] + 0.5;
  293.               end;
  294.             TCMOD_SCROLL :
  295.               begin
  296.                 scroll.x := shader.Layers[stageId].tcMods[j].Values[0]*gTimer.TotalTime;
  297.                 scroll.y := shader.Layers[stageId].tcMods[j].Values[1]*gTimer.TotalTime;
  298.                 texCoordBuffer[i].x := texCoordBuffer[i].x + scroll.x;
  299.                 texCoordBuffer[i].y := texCoordBuffer[i].y - scroll.y;
  300.               end;
  301.             TCMOD_STRETCH :
  302.               begin
  303.                 factor := (1/Eval(shader.Layers[StageID].tcMods[j].Wave));
  304.                 texCoordBuffer[i].x := (texCoordBuffer[i].x - 0.5) * factor + 0.5;
  305.                 texCoordBuffer[i].y := (texCoordBuffer[i].y - 0.5) * factor + 0.5;
  306.               end;
  307.             TCMOD_TRANSFORM :
  308.               begin
  309.                 v := texCoordBuffer[i];
  310.                 texCoordBuffer[i].x := v.x*shader.Layers[stageId].tcMods[j].Values[0] + v.y*shader.Layers[stageId].tcMods[j].Values[2] + shader.Layers[stageId].tcMods[j].Values[4];
  311.                 texCoordBuffer[i].y := v.x*shader.Layers[stageId].tcMods[j].Values[1] + v.y*shader.Layers[stageId].tcMods[j].Values[3] + shader.Layers[stageId].tcMods[j].Values[5];
  312.               end;
  313.             TCMOD_TURB :
  314.               begin
  315. //                v2 := inputBuffer[i].Position;
  316.                 v2.x := texCoordBuffer[i].x;
  317.                 v2.y := texCoordBuffer[i].y;
  318.                 v2.z := inputBuffer[i].Position.z;
  319.                 texCoordBuffer[i].x := texCoordBuffer[i].x + Sin((v2.x+v2.z)*0.1*shader.Layers[stageId].tcMods[j].Values[3] + gTimer.TotalTime + shader.Layers[stageId].tcMods[j].Values[2])*shader.Layers[stageId].tcMods[j].Values[1]*0.5;
  320.                 texCoordBuffer[i].y := texCoordBuffer[i].y + Sin((v2.y     )*0.1*shader.Layers[stageId].tcMods[j].Values[3] + gTimer.TotalTime + shader.Layers[stageId].tcMods[j].Values[2])*shader.Layers[stageId].tcMods[j].Values[1]*0.5;
  321.  
  322. //                v := texCoordBuffer[i];
  323. //                texCoordBuffer[i].x := texCoordBuffer[i].x + Sin((v.x     )*0.1*shader.Layers[stageId].tcMods[j].Values[3] + gTimer.TotalTime + shader.Layers[stageId].tcMods[j].Values[2])*shader.Layers[stageId].tcMods[j].Values[1]*0.5;
  324. //                texCoordBuffer[i].y := texCoordBuffer[i].y + Sin((v.y     )*0.1*shader.Layers[stageId].tcMods[j].Values[3] + gTimer.TotalTime + shader.Layers[stageId].tcMods[j].Values[2])*shader.Layers[stageId].tcMods[j].Values[1]*0.5;
  325.               end;
  326.           end;
  327.         end;
  328.       end;
  329.     end;
  330.   end;
  331. end;
  332.  
  333. procedure TQuake3BSP.SetDefaults;
  334. begin
  335.   glDepthFunc(GL_LEQUAL);
  336.   glEnable(GL_DEPTH_TEST);
  337.   glDisable(GL_ALPHA_TEST);
  338.   glDepthMask(true);
  339.   glDisable(GL_BLEND);
  340.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  341.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  342.  
  343.   //  glDisable(GL_COLOR);
  344.   if MultiTexture then begin
  345.     glActiveTexture(GL_TEXTURE1);
  346.     glDisableClientState(GL_COLOR_ARRAY);
  347.     glActiveTexture(GL_TEXTURE0);
  348.   end;
  349.   glDisableClientState(GL_COLOR_ARRAY);
  350.   glColor3ub(255,255,255);
  351.   glCullFace(GL_FRONT);
  352.   glEnable(GL_CULL_FACE);
  353. end;
  354.  


ShaderManagers Set State:
Code:
  1.  
  2. procedure TShaderManager.SetState(ShaderID, StageID : integer);
  3. var shader :TShader;
  4. begin
  5. try            
  6.   shader := Items[ShaderId];
  7.   // Depth func
  8.   glEnable(GL_DEPTH_TEST);
  9.   glDepthFunc(Items[ShaderID].Layers[StageID].DepthFunc);
  10.  
  11.   // Alpha
  12.   if Items[ShaderID].Layers[StageID].doAlphaTest = True then begin
  13.     glEnable(GL_ALPHA_TEST);
  14.     glAlphaFunc(Items[ShaderID].Layers[StageID].AlphaFunc, Items[ShaderID].Layers[StageID].AlphaRef);
  15.   end
  16.   else
  17.     glDisable(GL_ALPHA_TEST);
  18.  
  19.   if (Items[shaderId].Cull = GL_NONE) then
  20.   glDisable(GL_CULL_FACE)
  21.   else
  22.   glEnable(GL_CULL_FACE);
  23.  
  24.   // Z-Buffer - needs sorted shaders
  25.   if (Items[shaderId].Cull = GL_NONE) or (Items[shaderId].TotallyTrans) or (Items[ShaderID].Layers[StageID].doAlphaTest) then begin
  26.     if Items[ShaderID].Layers[StageID].DepthWrite then
  27.       glDepthMask(true)
  28.     else
  29.       glDepthMask(false);
  30.   end
  31.   else
  32.     glDepthMask(true);
  33.  
  34.   // Blending
  35.   if (Items[ShaderID].Layers[StageID].doBlending)  then begin
  36.     glEnable(GL_BLEND);
  37.     glBlendFunc(Items[shaderId].Layers[stageId].SrcBlend, Items[shaderId].Layers[stageId].DestBlend);
  38.   end
  39.   else
  40.     glDisable(GL_BLEND);
  41.  
  42.   if Shader.Layers[StageID].TexClamp then begin
  43.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  44.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  45.   end
  46.   else begin
  47.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  48.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  49.   end;
  50.  
  51. {  if Shader.Layers[StageID].tcGen = tcGen_Environment then begin
  52.     glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
  53.     glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
  54.     glEnable(GL_TEXTURE_GEN_S);
  55.     glEnable(GL_TEXTURE_GEN_T);
  56.   end
  57.   else begin
  58.     glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
  59.     glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
  60.     glDisable(GL_TEXTURE_GEN_S);
  61.     glDisable(GL_TEXTURE_GEN_T);
  62.   end;
  63. }
  64.   except
  65.     ShowMessage('setStage');
  66.   end;
  67. end;
  68.  

_________________
Free Map Editor - Game Requirements - Stucuk.Net
-Stu


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 16:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Maybe the shader (I guess you mean a Q3-Shader, not something like a pixel- or vertexshader) sets the alpha-value to 0, and that will (even if GL_BLEND is disabled) result in a primitive not drawn, so check for that. Otherwise, I can't think of any other cause for that, but maybe the shader generates some sort of error.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 16:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 21, 2004 22:39
Beiträge: 360
Wohnort: UK, Scotland
I made it disable the alpha, blend, etc b4 it drew the array stuff. and it was still not visible. (Shadermanager.setstate, each bit inside was disabled, except the depth since it screws the world up if its disabled)

_________________
Free Map Editor - Game Requirements - Stucuk.Net
-Stu


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 16, 2004 17:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 21, 2004 22:39
Beiträge: 360
Wohnort: UK, Scotland
Found the problem, shaders sometimes have surfaceparams.

i.e

Code:
  1.  
  2.     surfaceparm nolightmap // added as test
  3.     surfaceparm trans // added as test
  4.     surfaceparm alphashadow
  5.  


There is also ones for footsteps(if player stands on a surface with metalsteps for example a sound of a person walking on metal steps is plaed when the player walks). RTCW introdces more surfaceparams, mainly footsteps, i.e woodsteps, or snowsteps. The program uses an integerhash(i still have no clue how it works ans why one would want to use it) which works out the number when u give the surface param. It was giving a value even tho the param was never entered into the hash, which caused the object to not be drawn.

EDIT: Added screenshot


Dateianhänge:
Dateikommentar: ESCAPE2.BSP - RTCW MAP
_0079.jpg [145.19 KiB]
20-mal heruntergeladen

_________________
Free Map Editor - Game Requirements - Stucuk.Net
-Stu
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » English » English Programming Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.013s | 17 Queries | GZIP : On ]