|
You last visited: Today at 15:44
Advertisement
Direct x 9 Textur rund rendern
Discussion on Direct x 9 Textur rund rendern within the C/C++ forum part of the Coders Den category.
10/16/2012, 19:49
|
#1
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Direct x 9 Textur rund rendern
Hi,
ich versuche eine Textur rund zu rendern(sie ist ein großes viereck und ich rendere immer einen bestimmten teil(Ist eine MiniMap))
Ich möchte das aber gerne Rund haben
habe bereits mehreres versucht aber leider kein erfolg.
Hier meine test's
Rundes Rendern
Code:
BOOL C2DRender::RenderTextureCircle( int iVertices, float iRadius, CTexture* pTexture, DWORD dwBlendFactorAlhpa, FLOAT fScaleX , FLOAT fScaleY)
{
if(!pTexture) return FALSE;
int nVertex = iVertices + 1;
TEXTUREVERTEX * pVertices;
pVertices = new TEXTUREVERTEX [nVertex];
FLOAT fComplete;
FLOAT x;
FLOAT y;
FLOAT u;
FLOAT v;
for ( int iVertex = 0; iVertex < nVertex; iVertex ++)
{
fComplete = (float)iVertex / nVertex;
x = (float)((fScaleX) + (float)iRadius * cos(6.2831f*fComplete));
y = (float)((fScaleY) + (float)iRadius * sin(6.2831f*fComplete));
u = x / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
v = y / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
SetTextureVertex( pVertices, x, y, u, v);
pVertices++;
}
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, 1 );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, 1 );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_ARGB( dwBlendFactorAlhpa, 0, 155, 0 ) );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
//m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR );
m_pd3dDevice->SetVertexShader( NULL );
m_pd3dDevice->SetTexture( 0, pTexture->m_pTexture );
m_pd3dDevice->SetFVF( D3DFVF_TEXTUREVERTEX );
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, pVertices, sizeof( TEXTUREVERTEX ) );
m_pd3dDevice->SetTexture( 0, NULL );
return TRUE;
};
Alpha Maske Nr1.
Code:
struct tDXVertexTextureMask
{
float fRHW;
D3DXVECTOR3 vec;
FLOAT x, y, z;
D3DCOLOR color;
FLOAT u1, v1;
FLOAT u2, v2;
};
inline void SettDXVertexTextureMask( tDXVertexTextureMask* pVertices, FLOAT x, FLOAT y, FLOAT u, FLOAT v )
{
pVertices->x = (FLOAT)x - 0.5f;
pVertices->y = (FLOAT)y - 0.5f;
pVertices->z = 0.0f;
pVertices->vec = D3DXVECTOR3( x - 0.5f, y - 0.5f, 0 );
pVertices->fRHW = 1.0f;
pVertices->u1 = u;
pVertices->v1 = v;
pVertices->u2 = u;
pVertices->v2 = v;
pVertices->color = (DWORD)0xffffff;
}
BOOL C2DRender::RenderTextureAlphaMask( CPoint pt, CTexture* pTexture, CTexture* pTexture2, DWORD dwBlendFactorAlhpa, FLOAT fScaleX , FLOAT fScaleY )
{
if( !pTexture ) //gmpbigsun
return FALSE;
if( !pTexture2 )
return FALSE;
pt += m_ptOrigin;
CPoint ptCenter = pTexture->m_ptCenter;
ptCenter.x = (LONG)( ptCenter.x * fScaleX );
ptCenter.y = (LONG)( ptCenter.y * fScaleY );
pt -= ptCenter;
FLOAT left = (FLOAT)( pt.x );
FLOAT top = (FLOAT)( pt.y );
FLOAT right = pt.x + ( fScaleX * pTexture->m_size.cx );
FLOAT bottom = pt.y + ( fScaleY * pTexture->m_size.cy );
tDXVertexTextureMask vertex[ 4 ];
tDXVertexTextureMask* pVertices = vertex;
SettDXVertexTextureMask( pVertices, left, top, pTexture->m_fuLT, pTexture->m_fvLT );
pVertices++;
SettDXVertexTextureMask( pVertices, right, top, pTexture->m_fuRT, pTexture->m_fvRT);
pVertices++;
SettDXVertexTextureMask( pVertices, left, bottom, pTexture->m_fuLB, pTexture->m_fvLB);
pVertices++;
SettDXVertexTextureMask( pVertices, right, bottom, pTexture->m_fuRB, pTexture->m_fvRB);
pVertices++;
////
#define D3DFVF_TEXTURE_MASK (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX2)
m_pd3dDevice->SetFVF(D3DFVF_TEXTURE_MASK);
m_pd3dDevice->SetTexture( 0, pTexture->m_pTexture );
m_pd3dDevice->SetTexture( 1, pTexture2->m_pTexture );
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
// Use the color from the previous texture, and blend the alpha from the mask.
m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT);
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_pd3dDevice->SetTextureStageState(1, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, vertex, sizeof( tDXVertexTextureMask ) );
m_pd3dDevice->SetTexture( 0, NULL );
m_pd3dDevice->SetTexture( 1, NULL );
return TRUE;
}
Alpha Maske Nr2.
Code:
BOOL C2DRender::RenderTextureAlphaMask( CPoint pt, CTexture* pTexture, CTexture* pTexture2, DWORD dwBlendFactorAlhpa, FLOAT fScaleX , FLOAT fScaleY )
{
if( !pTexture ) //gmpbigsun
return FALSE;
if( !pTexture2 )
return FALSE;
pt += m_ptOrigin;
CPoint ptCenter = pTexture->m_ptCenter;
ptCenter.x = (LONG)( ptCenter.x * fScaleX );
ptCenter.y = (LONG)( ptCenter.y * fScaleY );
pt -= ptCenter;
FLOAT left = (FLOAT)( pt.x );
FLOAT top = (FLOAT)( pt.y );
FLOAT right = pt.x + ( fScaleX * pTexture->m_size.cx );
FLOAT bottom = pt.y + ( fScaleY * pTexture->m_size.cy );
tDXVertexTextureMask vertex[ 4 ];
tDXVertexTextureMask* pVertices = vertex;
SettDXVertexTextureMask( pVertices, left, top, pTexture->m_fuLT, pTexture->m_fvLT );
pVertices++;
SettDXVertexTextureMask( pVertices, right, top, pTexture->m_fuRT, pTexture->m_fvRT);
pVertices++;
SettDXVertexTextureMask( pVertices, left, bottom, pTexture->m_fuLB, pTexture->m_fvLB);
pVertices++;
SettDXVertexTextureMask( pVertices, right, bottom, pTexture->m_fuRB, pTexture->m_fvRB);
pVertices++;
////
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetVertexShader( NULL );
m_pd3dDevice->SetTexture( 0, pTexture->m_pTexture );
m_pd3dDevice->SetTexture( 1, pTexture2->m_pTexture );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, 1 );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, 1 );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetFVF( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 | D3DFVF_TEX2 );
m_pd3dDevice->SetRenderState( D3DRS_TEXTUREFACTOR, D3DCOLOR_ARGB( dwBlendFactorAlhpa, 0, 0, 0 ) );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_CURRENT );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG2, D3DTA_CURRENT );
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, vertex, sizeof( tDXVertexTextureMask ) );
m_pd3dDevice->SetTexture( 0, NULL );
m_pd3dDevice->SetTexture( 1, NULL );
return TRUE;
}
Kreis zeichnen
Code:
void CTexture::Draw2DCircle(POINT pt, float radius, D3DCOLOR color, LPDIRECT3DDEVICE9 dev)
{
const int NUMPOINTS = 400;
const float PI = 3.14159;
VERTEXLIST2 * pkCircle;
pkCircle = new VERTEXLIST2[NUMPOINTS + 1];
int i;
float X;
float Y;
float Theta;
float WedgeAngle; //Size of angle between two points on the circle (single wedge)
//Precompute WedgeAngle
WedgeAngle = (float)((2*PI) / NUMPOINTS);
D3DCOLOR Color = D3DCOLOR_ARGB( 80, 255, 255, 255 ); // Adjust Alpha
//Set up vertices for a circle
//Used <= in the for statement to ensure last point meets first point (closed circle)
for(i=0; i<=NUMPOINTS; i++)
{
//Calculate theta for this vertex
Theta = i * WedgeAngle;
//Compute X and Y locations
X = (float)(pt.x + radius * cos(Theta));
Y = (float)(pt.y - radius * sin(Theta));
pkCircle[i].fX = X;
pkCircle[i].fY = Y;
pkCircle[i].fZ = 0.0f;
pkCircle[i].fRHW = 1.0f;
pkCircle[i].Color = Color;
pkCircle[i].fU = 0.5f;
pkCircle[i].fV = 0.5f;
}
const BYTE bBlue[60] =
{
0x42, 0x4D, 0x3C, 0x00,0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x01,0x00, 0x00, 0x00, 0x01, 0x00,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x12, 0x0B, 0x00, 0x00,
0x12, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00
};
LPDIRECT3DTEXTURE9 Blue = NULL;
if( Blue == NULL )
D3DXCreateTextureFromFileInMemory( dev, (LPCVOID)&bBlue, 60, &Blue );
//Now draw the circle
dev->SetFVF(D3DFVF_TL);
dev->SetTexture(0, Blue);
dev->DrawPrimitiveUP(D3DPT_LINESTRIP, NUMPOINTS, &pkCircle[0], sizeof(pkCircle[0]));
}//Draw2DCircle
Das einzige was funzt ist Draw2DCircle aber dieser ist nur ein außen kreis ungefüllt und da krieg ich keine Textur rein also SetTexture( m_pTexture ) funzt zwar aber kriege sie nicht innerhalb des kreises.
hoffentlich kann mir einer weiterhelfen
(die alpha mask ist eine textur mit einem alphakreis(der teil soll nur noch am ende gezeigt werden))
|
|
|
10/16/2012, 21:01
|
#2
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Du könntest du auch einfach mit dem Stencil-Buffer arbeiten und dafür sorgen, dass nur ein bestimmter Abschnitt wirklich gezeichnet wird (dein Kreis) und dann einfach deine rechteckige Textur in den Bereich zeichnen. Die Ecken, die über den Kreis hinausragen, werden dann einfach nicht gezeichnet.
|
|
|
10/16/2012, 21:55
|
#3
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by MrSm!th
Du könntest du auch einfach mit dem Stencil-Buffer arbeiten und dafür sorgen, dass nur ein bestimmter Abschnitt wirklich gezeichnet wird (dein Kreis) und dann einfach deine rechteckige Textur in den Bereich zeichnen. Die Ecken, die über den Kreis hinausragen, werden dann einfach nicht gezeichnet.
|
Okay habe nun das ganze mit dem Stencilbuffer getestet, aber iwie ist das nicht richtig was ich gemacht habe
Code:
BOOL C2DRender::RenderTextureAlphaMask( CPoint pt, CTexture* pTexture, CTexture* pTexture2, DWORD dwBlendFactorAlhpa, FLOAT fScaleX , FLOAT fScaleY )
{
if( !pTexture ) //gmpbigsun
return FALSE;
if( !pTexture2 )
return FALSE;
pt += m_ptOrigin;
CPoint ptCenter = pTexture->m_ptCenter;
ptCenter.x = (LONG)( ptCenter.x * fScaleX );
ptCenter.y = (LONG)( ptCenter.y * fScaleY );
pt -= ptCenter;
FLOAT left = (FLOAT)( pt.x );
FLOAT top = (FLOAT)( pt.y );
FLOAT right = pt.x + ( fScaleX * pTexture->m_size.cx );
FLOAT bottom = pt.y + ( fScaleY * pTexture->m_size.cy );
TEXTUREVERTEX vertex[ 4 ];
TEXTUREVERTEX* pVertices = vertex;
SetTextureVertex( pVertices, left, top, pTexture->m_fuLT, pTexture->m_fvLT );
pVertices++;
SetTextureVertex( pVertices, right, top, pTexture->m_fuRT, pTexture->m_fvRT);
pVertices++;
SetTextureVertex( pVertices, left, bottom, pTexture->m_fuLB, pTexture->m_fvLB);
pVertices++;
SetTextureVertex( pVertices, right, bottom, pTexture->m_fuRB, pTexture->m_fvRB);
pVertices++;
m_pd3dDevice->SetTexture( 0, pTexture->m_pTexture );
m_pd3dDevice->SetTexture( 1, pTexture2->m_pTexture );
m_pd3dDevice->SetRenderState(D3DRS_STENCILENABLE,TRUE);
m_pd3dDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP);
m_pd3dDevice->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP);
m_pd3dDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE);
m_pd3dDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
m_pd3dDevice->SetRenderState(D3DRS_STENCILREF, 0x1);
m_pd3dDevice->SetRenderState(D3DRS_STENCILMASK, 0xff000000);
m_pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xff000000);
m_pd3dDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, vertex, sizeof( TEXTUREVERTEX ) );
m_pd3dDevice->SetTexture( 0, NULL );
m_pd3dDevice->SetTexture( 1, NULL );
return TRUE;
/////
};
rund ist es nicht wirklich
|
|
|
10/17/2012, 14:29
|
#4
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Du musst den Stencilbuffer ja auch nutzen oO
Du müsstest erst deine vorherige Funktion zum Zeichnen eines Kreises nutzen, um den Stencilbuffer-Wert innerhalb dieses Kreises zu erhöhen. Außen sollte er 0 bleiben. Dann zeichnest du deine Textur mit dem aktivierten Stencilbuffer und lässt nur Pixel zeichnen, an deren Steller der Stencilbuffer-Wert über 0 ist, sodass halt außen alles nicht gezeichnet wird und innerhalb deines unsichtbaren Kreises schon (unsichtbar natürlich deshalb, weil du vorher den Kreis transparent machen musst, er soll ja nur den Stencilbuffer setzen und nicht im Bild auftauchen).
|
|
|
10/17/2012, 14:55
|
#5
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
die funktion um mein kreis zu malen malt aber nur den außenrand ich weiß ganicht ob das innere überhaupt behandelt wird.
Auch google gibt nicht all zu viel informationen zu dem gebrauch von dem StencilBuffer.
eine Code Beispiel oder ein Tutorial konnte ihc leider nicht finden. vllt. kannst du ja ein kleines beispiel machen oder weißt ein tutorial, mein directx buch ist leider sehr alt und behandelt keinen Stencil Buffer.
|
|
|
10/17/2012, 15:18
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Ich dachte die erste Funktion macht etwas in der Richtung. Einen Kreis zeichnest du im Grunde mithilfe vieler kleiner kleine Dreiecke, die als Eckpunkte jeweils den Mittelpunkt und 2 Punkte auf der Kreislinie (die du ja schon zeichnen kannst) haben.
Folgender Code-Auszug von David Scherfgen aus seinem Buch 3D-Spieleprogrammierung mit DirectX 9 und C++ (könnte vielleicht für dich interessant sein):
Code:
// Kapitel 2
// Beispielprogramm 13
// ===================
// Hier wird der Stencil-Buffer verwendet, um den Overdraw jedes Pixels darzustellen.
#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "..\\..\\Allgemeines\\Direct3DEnum.h"
#include "..\\..\\Allgemeines\\InitDirect3D.h"
#include "Resource.h"
// ******************************************************************
// Struktur für einen Vertex: Position und Farbe
struct SVertex
{
tbVector3 vPosition; // Position des Vertex
DWORD dwColor; // Farbe des Vertex
static const DWORD dwFVF; // Vertexformat
};
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
// ******************************************************************
// Globale Variablen
float g_fTime = 0.0f; // Zeitzähler
SDirect3DParameters g_Direct3DParameters; // Direct3D-Parameter
LPD3DXMESH g_pThing = NULL; // Das Modell
// ******************************************************************
// Render-Funktion
tbResult Render(float fNumSecsPassed)
{
HRESULT hResult;
tbMatrix mWorld;
SVertex aVertex[4];
// Nur den Stencil-Buffer leeren.
// Der Z-Buffer wird nicht gebraucht und der Bildpuffer wird
// sowieso von den Rechtecken gefüllt.
if(FAILED(hResult = g_pD3DDevice->Clear(0,
NULL,
D3DCLEAR_STENCIL,
D3DCOLOR_XRGB(0, 0, 0),
1.0f,
0)))
{
// Fehler beim Leeren!
TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
}
// Szene beginnen
g_pD3DDevice->BeginScene();
// ------------------------------------------------------------------
// Als erstes zeichnen wir die drei sich drehenden Objekte.
// Dabei soll jeder Pixel den Stencil-Wert an dieser Stelle um eins erhöhen,
// außerdem soll nichts davon auf den Bildschirm gelangen.
// Damit auch wirklich alle Dreiecke gezeichnet werden, schalten wir Culling ab.
// Der Z-Buffer wird so eingestellt, dass kein Pixel den Test besteht.
// D3DRS_STENCILZFAIL ist dafür der richtige Fall. Dieses Render-State setzen
// wir auf den Wert D3DSTENCILOP_INCRSAT, damit die Pixel, die den Z-Test
// nicht bestanden haben (also alle) den Stencil-Wert um eins erhöhen.
// Den Stencil-Test stellen wir so ein, dass ihn alle Pixel bestehen.
g_pD3DDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
g_pD3DDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_INCRSAT);
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
g_pD3DDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER);
// Nun die drei Objekte zeichnen. Nichts davon wird sichtbar - sie hinterlassen
// ihre Spuren nur im Stencil-Buffer und die machen wir später dann erkennbar.
mWorld = tbMatrixRotation(g_fTime, g_fTime * 0.5f, g_fTime * 0.25f) *
tbMatrixTranslation(tbVector3(0.0f, 0.0f, 3.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
mWorld = tbMatrixRotation(g_fTime * 0.9f, g_fTime * 0.6f, g_fTime * 0.3f) *
tbMatrixTranslation(tbVector3(-3.0f, 0.0f, 5.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
mWorld = tbMatrixRotation(g_fTime * 1.1f, g_fTime * 0.4f, g_fTime * 0.35f) *
tbMatrixTranslation(tbVector3(3.0f, 0.0f, 5.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
// ------------------------------------------------------------------
// Nun zeichnen wir eine Reihe von Rechtecken, die sich über das gesamte
// Bild erstrecken. Das erste Rechteck wird nur dort gezeichnet, wo der
// Stencil-Wert eins ist, das zweite nur da, wo er zwei ist und so weiter.
// Jedes Rechteck bekommt eine andere Farbe. Dort, wo mehr Overdraw ist,
// wird die Farbe stärker rötlich.
// Vertexformat setzen und den Z-Buffer so einstellen, dass das Rechteck
// auch sichtbar wird
g_pD3DDevice->SetFVF(SVertex::dwFVF);
g_pD3DDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);
// Die Weltmatrix zurücksetzen
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&tbMatrixIdentity()));
// Rechteckkoordinaten generieren
aVertex[0].vPosition = tbVector3(-100.0f, -100.0f, 1.0f);
aVertex[1].vPosition = tbVector3(-100.0f, 100.0f, 1.0f);
aVertex[2].vPosition = tbVector3( 100.0f, -100.0f, 1.0f);
aVertex[3].vPosition = tbVector3( 100.0f, 100.0f, 1.0f);
// Für jedes Rechteck...
for(int iRect = 0; iRect < 10; iRect++)
{
// Stencil-Buffer-Einstellungen vornehmen.
// Das letzte Rechteck soll auch bei denjenigen Pixeln gezeichnet werden,
// bei denen der Overdraw größer als die 15 ist.
if(iRect != 9) g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
else g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL);
// Der Referenzwert entspricht der Nummer des Rechtecks.
g_pD3DDevice->SetRenderState(D3DRS_STENCILREF, iRect);
// Die Vertexfarben einstellen. Je höher iRect, desto roter.
aVertex[0].dwColor = aVertex[1].dwColor = aVertex[2].dwColor = aVertex[3].dwColor
= tbColor((float)(iRect) / 9.0f, 1.0f - (float)(iRect) / 9.0f, 0.0f);
// Das Rechteck zeichnen
g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SVertex));
}
// ------------------------------------------------------------------
// Szene beenden
g_pD3DDevice->EndScene();
// Der große Moment: den Bildpuffer sichtbar machen
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
return TB_OK;
}
// ******************************************************************
// Move-Funktion
tbResult Move(float fNumSecsPassed)
{
// Zeitzähler erhöhen
g_fTime += fNumSecsPassed;
return TB_OK;
}
// ******************************************************************
// Herunterfahren der Szene
tbResult ExitScene()
{
// Das Modell löschen
TB_SAFE_RELEASE(g_pThing);
return TB_OK;
}
// ******************************************************************
// Herunterfahren der Anwendung
tbResult ExitApplication()
{
// Szene herunterfahren
ExitScene();
// Direct3D und Fenster herunterfahren
ExitDirect3D();
ExitWindow();
// Engine herunterfahren
tbExit();
return TB_OK;
}
// ******************************************************************
// Initialisieren der Szene
tbResult InitScene()
{
HRESULT hResult;
tbMatrix mProjection;
float fAspect;
// Dithering aktivieren, Beleuchtung ausschalten
g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// Das Bildseitenverhältnis berechnen
fAspect = (float)(g_Direct3DParameters.VideoMode.Width)
/ (float)(g_Direct3DParameters.VideoMode.Height);
// Die Projektionsmatrix erzeugen
mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f), // Sichtfeld: 90°
fAspect, // Bildseitenverhältnis
0.1f, // Nahe Clipping-Ebene
100.0f); // Ferne Clipping-Ebene
// Projektionsmatrix einsetzen
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));
// Das Modell laden
if(FAILED(hResult = D3DXLoadMeshFromX("Thing.x",
D3DXMESH_MANAGED,
g_pD3DDevice,
NULL,
NULL,
NULL,
NULL,
&g_pThing)))
{
// Fehler!
TB_ERROR_DIRECTX("D3DXLoadMeshFromX", hResult, TB_ERROR);
}
return TB_OK;
}
// ******************************************************************
// Initialisierungsfunktion
tbResult InitApplication()
{
tbResult Result;
// TriBase-Engine initialisieren
tbInit();
// Direct3D-Optionen abfragen (vom Benutzer gewählt)
Result = GetDirect3DParameters(&g_Direct3DParameters);
if(Result == TB_ERROR)
{
// Es trat ein Fehler auf!
MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
else if(Result == TB_CANCELED)
{
// Der Dialog wurde abgebrochen!
return TB_CANCELED;
}
// Dieses Programm benötigt einen Stencil-Buffer. Wenn das vom Benutzer
// gewählte Format keinen Platz dafür bietet, bricht das Programm ab.
if(g_Direct3DParameters.ZStencilBufferFormat != D3DFMT_D24S8 &&
g_Direct3DParameters.ZStencilBufferFormat != D3DFMT_D24X4S4)
{
MessageBox(NULL, "Das von Ihnen gewählte Z-Stencil-Buffer-Format bietet keinen oder nicht genug Platz für die Stencil-Werte!",
"Fehler", MB_OK | MB_ICONINFORMATION);
return TB_CANCELED;
}
// Fenster initialisieren. Die Größe hängt vom gewählten
// Videomodus ab, der in der Parameterstruktur gespeichert ist.
if(InitWindow(g_Direct3DParameters.VideoMode.Width,
g_Direct3DParameters.VideoMode.Height,
"Beispielprogramm Nr. 13: Der Stencil-Buffer",
LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))))
{
// Fehler beim Erstellen des Fensters!
MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
// Direct3D mit den abgefragten Einstellungen initialisieren
if(InitDirect3D(&g_Direct3DParameters,
g_hWindow))
{
// Fehler!
MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
ExitApplication();
return TB_ERROR;
}
// Szene initialisieren
if(InitScene())
{
// Fehler!
MessageBox(g_hWindow, "Fehler beim Initialisieren der Szene!",
"Fehler", MB_OK | MB_ICONINFORMATION);
ExitApplication();
return TB_ERROR;
}
// Alles OK!
return TB_OK;
}
// ******************************************************************
// Windows-Hauptfunktion
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* pcCmdLine,
int iShowCmd)
{
tbResult Result;
// Initialisierung
Result = InitApplication();
if(Result == TB_CANCELED) return 0;
else if(Result)
{
MessageBox(NULL, "Fehler beim Initialisieren der Anwendung!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
return 1;
}
// Nachrichtenschleife
tbDoMessageLoop(Render, Move);
// Herunterfahren
ExitApplication();
return 0;
}
// ******************************************************************
|
|
|
10/17/2012, 16:28
|
#7
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by MrSm!th
Ich dachte die erste Funktion macht etwas in der Richtung. Einen Kreis zeichnest du im Grunde mithilfe vieler kleiner kleine Dreiecke, die als Eckpunkte jeweils den Mittelpunkt und 2 Punkte auf der Kreislinie (die du ja schon zeichnen kannst) haben.
Folgender Code-Auszug von David Scherfgen aus seinem Buch 3D-Spieleprogrammierung mit DirectX 9 und C++ (könnte vielleicht für dich interessant sein):
Code:
// Kapitel 2
// Beispielprogramm 13
// ===================
// Hier wird der Stencil-Buffer verwendet, um den Overdraw jedes Pixels darzustellen.
#include <Windows.h>
#include <TriBase.h>
#include "..\\..\\Allgemeines\\InitWindow.h"
#include "..\\..\\Allgemeines\\Direct3DEnum.h"
#include "..\\..\\Allgemeines\\InitDirect3D.h"
#include "Resource.h"
// ******************************************************************
// Struktur für einen Vertex: Position und Farbe
struct SVertex
{
tbVector3 vPosition; // Position des Vertex
DWORD dwColor; // Farbe des Vertex
static const DWORD dwFVF; // Vertexformat
};
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
// ******************************************************************
// Globale Variablen
float g_fTime = 0.0f; // Zeitzähler
SDirect3DParameters g_Direct3DParameters; // Direct3D-Parameter
LPD3DXMESH g_pThing = NULL; // Das Modell
// ******************************************************************
// Render-Funktion
tbResult Render(float fNumSecsPassed)
{
HRESULT hResult;
tbMatrix mWorld;
SVertex aVertex[4];
// Nur den Stencil-Buffer leeren.
// Der Z-Buffer wird nicht gebraucht und der Bildpuffer wird
// sowieso von den Rechtecken gefüllt.
if(FAILED(hResult = g_pD3DDevice->Clear(0,
NULL,
D3DCLEAR_STENCIL,
D3DCOLOR_XRGB(0, 0, 0),
1.0f,
0)))
{
// Fehler beim Leeren!
TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
}
// Szene beginnen
g_pD3DDevice->BeginScene();
// ------------------------------------------------------------------
// Als erstes zeichnen wir die drei sich drehenden Objekte.
// Dabei soll jeder Pixel den Stencil-Wert an dieser Stelle um eins erhöhen,
// außerdem soll nichts davon auf den Bildschirm gelangen.
// Damit auch wirklich alle Dreiecke gezeichnet werden, schalten wir Culling ab.
// Der Z-Buffer wird so eingestellt, dass kein Pixel den Test besteht.
// D3DRS_STENCILZFAIL ist dafür der richtige Fall. Dieses Render-State setzen
// wir auf den Wert D3DSTENCILOP_INCRSAT, damit die Pixel, die den Z-Test
// nicht bestanden haben (also alle) den Stencil-Wert um eins erhöhen.
// Den Stencil-Test stellen wir so ein, dass ihn alle Pixel bestehen.
g_pD3DDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
g_pD3DDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_INCRSAT);
g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
g_pD3DDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER);
// Nun die drei Objekte zeichnen. Nichts davon wird sichtbar - sie hinterlassen
// ihre Spuren nur im Stencil-Buffer und die machen wir später dann erkennbar.
mWorld = tbMatrixRotation(g_fTime, g_fTime * 0.5f, g_fTime * 0.25f) *
tbMatrixTranslation(tbVector3(0.0f, 0.0f, 3.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
mWorld = tbMatrixRotation(g_fTime * 0.9f, g_fTime * 0.6f, g_fTime * 0.3f) *
tbMatrixTranslation(tbVector3(-3.0f, 0.0f, 5.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
mWorld = tbMatrixRotation(g_fTime * 1.1f, g_fTime * 0.4f, g_fTime * 0.35f) *
tbMatrixTranslation(tbVector3(3.0f, 0.0f, 5.0f));
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
g_pThing->DrawSubset(0);
// ------------------------------------------------------------------
// Nun zeichnen wir eine Reihe von Rechtecken, die sich über das gesamte
// Bild erstrecken. Das erste Rechteck wird nur dort gezeichnet, wo der
// Stencil-Wert eins ist, das zweite nur da, wo er zwei ist und so weiter.
// Jedes Rechteck bekommt eine andere Farbe. Dort, wo mehr Overdraw ist,
// wird die Farbe stärker rötlich.
// Vertexformat setzen und den Z-Buffer so einstellen, dass das Rechteck
// auch sichtbar wird
g_pD3DDevice->SetFVF(SVertex::dwFVF);
g_pD3DDevice->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS);
// Die Weltmatrix zurücksetzen
g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&tbMatrixIdentity()));
// Rechteckkoordinaten generieren
aVertex[0].vPosition = tbVector3(-100.0f, -100.0f, 1.0f);
aVertex[1].vPosition = tbVector3(-100.0f, 100.0f, 1.0f);
aVertex[2].vPosition = tbVector3( 100.0f, -100.0f, 1.0f);
aVertex[3].vPosition = tbVector3( 100.0f, 100.0f, 1.0f);
// Für jedes Rechteck...
for(int iRect = 0; iRect < 10; iRect++)
{
// Stencil-Buffer-Einstellungen vornehmen.
// Das letzte Rechteck soll auch bei denjenigen Pixeln gezeichnet werden,
// bei denen der Overdraw größer als die 15 ist.
if(iRect != 9) g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL);
else g_pD3DDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL);
// Der Referenzwert entspricht der Nummer des Rechtecks.
g_pD3DDevice->SetRenderState(D3DRS_STENCILREF, iRect);
// Die Vertexfarben einstellen. Je höher iRect, desto roter.
aVertex[0].dwColor = aVertex[1].dwColor = aVertex[2].dwColor = aVertex[3].dwColor
= tbColor((float)(iRect) / 9.0f, 1.0f - (float)(iRect) / 9.0f, 0.0f);
// Das Rechteck zeichnen
g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SVertex));
}
// ------------------------------------------------------------------
// Szene beenden
g_pD3DDevice->EndScene();
// Der große Moment: den Bildpuffer sichtbar machen
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
return TB_OK;
}
// ******************************************************************
// Move-Funktion
tbResult Move(float fNumSecsPassed)
{
// Zeitzähler erhöhen
g_fTime += fNumSecsPassed;
return TB_OK;
}
// ******************************************************************
// Herunterfahren der Szene
tbResult ExitScene()
{
// Das Modell löschen
TB_SAFE_RELEASE(g_pThing);
return TB_OK;
}
// ******************************************************************
// Herunterfahren der Anwendung
tbResult ExitApplication()
{
// Szene herunterfahren
ExitScene();
// Direct3D und Fenster herunterfahren
ExitDirect3D();
ExitWindow();
// Engine herunterfahren
tbExit();
return TB_OK;
}
// ******************************************************************
// Initialisieren der Szene
tbResult InitScene()
{
HRESULT hResult;
tbMatrix mProjection;
float fAspect;
// Dithering aktivieren, Beleuchtung ausschalten
g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// Das Bildseitenverhältnis berechnen
fAspect = (float)(g_Direct3DParameters.VideoMode.Width)
/ (float)(g_Direct3DParameters.VideoMode.Height);
// Die Projektionsmatrix erzeugen
mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f), // Sichtfeld: 90°
fAspect, // Bildseitenverhältnis
0.1f, // Nahe Clipping-Ebene
100.0f); // Ferne Clipping-Ebene
// Projektionsmatrix einsetzen
g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));
// Das Modell laden
if(FAILED(hResult = D3DXLoadMeshFromX("Thing.x",
D3DXMESH_MANAGED,
g_pD3DDevice,
NULL,
NULL,
NULL,
NULL,
&g_pThing)))
{
// Fehler!
TB_ERROR_DIRECTX("D3DXLoadMeshFromX", hResult, TB_ERROR);
}
return TB_OK;
}
// ******************************************************************
// Initialisierungsfunktion
tbResult InitApplication()
{
tbResult Result;
// TriBase-Engine initialisieren
tbInit();
// Direct3D-Optionen abfragen (vom Benutzer gewählt)
Result = GetDirect3DParameters(&g_Direct3DParameters);
if(Result == TB_ERROR)
{
// Es trat ein Fehler auf!
MessageBox(NULL, "Fehler beim Abzählen!", "Fehler",
MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
else if(Result == TB_CANCELED)
{
// Der Dialog wurde abgebrochen!
return TB_CANCELED;
}
// Dieses Programm benötigt einen Stencil-Buffer. Wenn das vom Benutzer
// gewählte Format keinen Platz dafür bietet, bricht das Programm ab.
if(g_Direct3DParameters.ZStencilBufferFormat != D3DFMT_D24S8 &&
g_Direct3DParameters.ZStencilBufferFormat != D3DFMT_D24X4S4)
{
MessageBox(NULL, "Das von Ihnen gewählte Z-Stencil-Buffer-Format bietet keinen oder nicht genug Platz für die Stencil-Werte!",
"Fehler", MB_OK | MB_ICONINFORMATION);
return TB_CANCELED;
}
// Fenster initialisieren. Die Größe hängt vom gewählten
// Videomodus ab, der in der Parameterstruktur gespeichert ist.
if(InitWindow(g_Direct3DParameters.VideoMode.Width,
g_Direct3DParameters.VideoMode.Height,
"Beispielprogramm Nr. 13: Der Stencil-Buffer",
LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))))
{
// Fehler beim Erstellen des Fensters!
MessageBox(NULL, "Fehler beim Erstellen des Fensters!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
// Direct3D mit den abgefragten Einstellungen initialisieren
if(InitDirect3D(&g_Direct3DParameters,
g_hWindow))
{
// Fehler!
MessageBox(g_hWindow, "Fehler beim Initialisieren von Direct3D!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
ExitApplication();
return TB_ERROR;
}
// Szene initialisieren
if(InitScene())
{
// Fehler!
MessageBox(g_hWindow, "Fehler beim Initialisieren der Szene!",
"Fehler", MB_OK | MB_ICONINFORMATION);
ExitApplication();
return TB_ERROR;
}
// Alles OK!
return TB_OK;
}
// ******************************************************************
// Windows-Hauptfunktion
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* pcCmdLine,
int iShowCmd)
{
tbResult Result;
// Initialisierung
Result = InitApplication();
if(Result == TB_CANCELED) return 0;
else if(Result)
{
MessageBox(NULL, "Fehler beim Initialisieren der Anwendung!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
return 1;
}
// Nachrichtenschleife
tbDoMessageLoop(Render, Move);
// Herunterfahren
ExitApplication();
return 0;
}
// ******************************************************************
|
Danke!
so ungefähr verstehen tue ich das prinzip, setze mich heute abend dranne und poste dann mal mein ergebnis falls ich heute abend was schaffe.
|
|
|
10/17/2012, 19:55
|
#8
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
|
Nur mal etwas, was mir auf die Schnelle auffällt:
Code:
u = x / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
v = y / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
Ist das hier wirklich gemeint?
Du weißt, dass ^ in C++ der XOR-Operator ist und keine Potenz darstellt?
Bin mir da nämlich nicht sicher, ob das das ist, was du willst.
|
|
|
10/17/2012, 19:57
|
#9
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by MrSm!th
Nur mal etwas, was mir auf die Schnelle auffällt:
Code:
u = x / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
v = y / (sqrt((double) ((int)x^(int)2 + (int)y^(int)2 )));
Ist das hier wirklich gemeint?
Du weißt, dass ^ in C++ der XOR-Operator ist und keine Potenz darstellt?
Bin mir da nämlich nicht sicher, ob das das ist, was du willst.
|
ja sollte mal ^ sein aber das ganze hat nie gefunzt. Werde mich nun an das mit dem Stencil buffer setzen
ich kapier jetz noch nicht so ganz wie sich der stencil buffer mit werten füllt wenn ich mein kreis benuzte also wenn er außerhalb meines kreises(die 400 vectoren) ist 0 ist und inner halb 1 und dann nur die map da rendert wo der stencil buffer 1 ist.
blick noch nicht so durch wie der buffer seine werte kriegt..
|
|
|
|
Similar Threads
|
Textur rund rendern
10/15/2012 - Flyff Private Server - 0 Replies
Hi,
ich versuche eine Textur rund zu rendern(sie ist ein großes viereck und ich rendere immer einen bestimmten teil(Ist eine MiniMap))
Ich möchte das aber gerne Rund haben
habe bereits mehreres versucht aber leider kein erfolg.
Hier meine test's
Rundes Rendern
|
rendern
04/17/2012 - elite*gold Trading - 2 Replies
Jo, kann mir vll jmd gaaanz schnell nen Bild rendern ?
gebe 3 Egold (:
http://s7.directupload.net/images/120417/co8tqhgr .jpg
|
Rendern
01/06/2012 - Off Topic - 2 Replies
http://www.imgbox.de/users/public/images/JPjfZIS12 N.jpg
Könnte mir das bitte einer Rendern :o
|
Rendern ;)
10/19/2011 - Video Art - 4 Replies
Hy Com,
ehrlich geagt habe ich keine ahnung ob ich hier richtig bin ;)
wen nicht dan entschuldige ich mich
Also ich habe folgendes problem:
Bei meinen videos (die ich von der Ps3 aufgenommen habe) ist immer rechts und link ein schwarzer streifen:
http://www.youtube.com/user/GameMusicGFX?feature= mhee
Meine Frage wie render ich das richtig damit der nicht mehr da ist
|
All times are GMT +2. The time now is 15:44.
|
|