>OpenGL под твой шейдер
oO
iArt
Все сто всяких oO лучше подсказал что нибудь по шейдарам. и прошу без всеки издевок я всетоки новичек и
и прошу помощи у знатоков дела. Лубой помощи буду рад.
И каждый мастер в своем деле, но если каждый будет помогать друг другу то все станут чуть чуть лучше разбираться в ремесле каждого из мастеров.
Mekrod
OpenGL не надо качать, чтобы шейдеры посмотреть.
Для этого нужна программа, называется notepad.exe.
SNVampyre
Спасибо за подсказку. Я то просто и незнал об этом.
> Если ты понимаешь о чем идет речь - расскажу еще пару "фич", а если нет, то тебе следует еще немного подучить шейдеры. Если хочешь могу скинуть свой старый шейдер стекла на GLSL
после этого вы пишите
>блин, Sergio666 это круто есди можешь скинь. И где можно скачать OpenGL под твой шейдер чтобы можно было просмотреть его.
???
вам стоило написать что то вроде
>Если ты понимаешь о чем идет речь
нет подскажите что почитать про шейдеры ....
однако вы уверены что знаете и тут же пишите
>скачать OpenGL под твой шейдер
я просто удивился вашему ответу ....
iArt
Мне просто интересно было посмотреть на исзодник шейдара под GLSL и не знал что их можно просмотреть через простой текстовый редектор. И что тут такого. Sergio666 любезно предложил мне выложить свой старый шейдар. Я принел его предложение.
Понимаешь я уже неделю лазию в инете что бы найти хоть одну книгу на радном языке по шейдерам на HLSL. Но ни где не могу найти. Так что пришлось подумать о GLSL. Ведь самому хочется создавать шейдеры как Sergio666 или RaZOR и другие парни которые участвовали предыдущем конкурсе. А не кто кроме Sergio666 помощи и не предложил, а так как он разбирается в GLSL я и попросил выложить его старый шейдер.
Ну тогда выкладываю. Комментировать буду потом - сейчас уже нет времени
uniform samplerCube cubemap_texture; uniform sampler2D lightmap_texture; uniform vec3 view_position; uniform vec3 light_source; uniform mat3 light_matrix; varying vec3 normal; varying vec4 vertex; varying vec3 normal_VS; varying vec4 proj_coords; #include "Constants.inc" #include "CookTorrance.inc" #include "Postprocess.inc" const vec3 glass_color = vec3(95.0, 253.0, 215.0) / 255.0; void main() { vec3 vNormal = -normal; vec3 vLight = light_source - vertex.xyz; vec3 vView = view_position - vertex.xyz; float fLightDistance = length(vLight); float fScattering = pow( 1.0 / (1.0 + fLightDistance * 0.0002), 6.0 ); vLight = normalize(vLight); vView = normalize(vView); vec2 vLightShading = LightFunction(vNormal, vLight, vView, 0.8925); vLightShading.x = 0.8 + 0.2 * vLightShading.x; float VdotN = max(0.0, dot(vView, vNormal)); float fFresnel = 1.0 / pow(1.0 + VdotN, 3.35); vec3 vReflection = textureCube( cubemap_texture, reflect(vView, vNormal) ).xyz; float fRefractionR = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA ) ).r; float fRefractionG = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.018) ).g; float fRefractionB = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.035) ).b; vec3 vRefraction = vec3(fRefractionR, fRefractionG, fRefractionB); vec3 vColor = mix(vRefraction, vReflection, fFresnel); vColor = mix( vColor, glass_color * dot(vColor, LUMINANCE_VEC), 1.0 - VdotN ); vec3 result = (light_matrix[0] * fScattering + light_matrix[1] * vLightShading.x) * vColor + light_matrix[2] * vLightShading.y ; gl_FragColor = vec4( result, 1.0); }
Sergio666
спасибо. Нет, Большое спасибо.
Mekrod
Ну попытайся пока разобраться сам... :)
Если что - задавай вопросы
Mekrod
> найти хоть одну книгу на радном языке
OpenGL. Трехмерная графика и язык программирования шейдеров.djvu
погугли
это если русский родной..
Троль отaке!
Привет всем помогите подключить шейдер к модели вот пример программного кода вывода модели
подскажите как подключить сюда шейдер. Если у кого есть пример то если можно выложите ссылочку.
В зарание благодарен. Еше раз спасибо Sergio666 за помощь в шедарах.
#include <windows.h>
#include "d3d9.h"
#include "d3dx9.h"
#include "Direct3D.h"
// Direct3D objects
IDirect3D9 *g_pD3D = NULL;
IDirect3DDevice9 *g_pD3DDevice = NULL;
// Mesh collection and frame hierarchy
D3DXMESHCONTAINER_EX *g_Mesh = NULL;
D3DXFRAME_EX *g_Frame = NULL;
// Bounding radius of mesh
float g_MeshRadius = 0.0f;
// Window class and caption text
char g_szClass[] = "Shader";
char g_szCaption[] = "Shader FX";
// Function prototypes
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow);
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL DoInit(HWND hWnd);
void DoShutdown();
void DoFrame();
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow)
{
WNDCLASSEX wcex;
MSG Msg;
HWND hWnd;
// Initialize the COM system
CoInitialize(NULL);
// Create the window class here and register it
wcex.cbSize = sizeof(wcex);
wcex.style = CS_CLASSDC;
wcex.lpfnWndProc = WindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInst;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = NULL;
wcex.lpszMenuName = NULL;
wcex.lpszClassName = g_szClass;
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wcex))
return FALSE;
// Create the main window
hWnd = CreateWindow(g_szClass, g_szCaption,
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
0, 0, 640, 480,
NULL, NULL, hInst, NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);
// Call init function and enter message pump
if(DoInit(hWnd) == TRUE) {
// Start message pump, waiting for user to exit
ZeroMemory(&Msg, sizeof(MSG));
while(Msg.message != WM_QUIT) {
if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
// Render a single frame
DoFrame();
}
}
// Call shutdown
DoShutdown();
// Unregister the window class
UnregisterClass(g_szClass, hInst);
// Shut down the COM system
CoUninitialize();
return 0;
}
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, \
WPARAM wParam, LPARAM lParam)
{
// Only handle window destruction messages
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
BOOL DoInit(HWND hWnd)
{
// Initialize Direct3D
InitD3D(&g_pD3D, &g_pD3DDevice, hWnd);
// Load a skeletal mesh
LoadMesh(&g_Mesh, &g_Frame, g_pD3DDevice, "..\\Data\\Glass.x", "..\\Data\\");
// Get the bounding radius of the object
g_MeshRadius = 0.0f;
D3DXMESHCONTAINER_EX *pMesh = g_Mesh;
while(pMesh) {
// Lock the vertex buffer, get its radius, and unlock buffer
if(pMesh->MeshData.pMesh) {
D3DXVECTOR3 *pVertices, vecCenter;
float Radius;
pMesh->MeshData.pMesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&pVertices);
D3DXComputeBoundingSphere(pVertices,
pMesh->MeshData.pMesh->GetNumVertices(),
D3DXGetFVFVertexSize(pMesh->MeshData.pMesh->GetFVF()),
&vecCenter, &Radius);
pMesh->MeshData.pMesh->UnlockVertexBuffer();
// Update radius
if(Radius > g_MeshRadius)
g_MeshRadius = Radius;
}
// Go to next mesh
pMesh = (D3DXMESHCONTAINER_EX*)pMesh->pNextMeshContainer;
}
return TRUE;
}
void DoShutdown()
{
// Free mesh and frame data
delete g_Mesh; g_Mesh = NULL;
delete g_Frame; g_Frame = NULL;
// Release D3D objects
ReleaseCOM(g_pD3DDevice);
ReleaseCOM(g_pD3D);
}
void DoFrame()
{
// Calculate a view transformation matrix
// Using the mesh's bounding radius to position the viewer
float Distance = g_MeshRadius * 3.0f;
float Angle = (float)timeGetTime() / 2000.0f;
D3DXMATRIX matView;
D3DXMatrixLookAtLH(&matView,
&D3DXVECTOR3((float)cos(Angle) * Distance, g_MeshRadius, (float)sin(Angle) * Distance),
&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);
// Rebuild the frame hierarchy transformations
if(g_Frame)
g_Frame->UpdateHierarchy();
// Rebuild the mesh
UpdateMesh(g_Mesh);
// Clear the device and start drawing the scene
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0,0,64,255), 1.0f, 0);
if(SUCCEEDED(g_pD3DDevice->BeginScene())) {
// Set a world transformation
D3DXMATRIX matWorld;
D3DXMatrixIdentity(&matWorld);
g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
// Render skinned mesh
DrawMesh(g_Mesh);
// End the scene
g_pD3DDevice->EndScene();
}
// Present the scene to the user
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}
Mekrod
тыже на DX пишеш а просиш шейдер под GL
вопрос зачем?
Chaos_Optima
Да просил шейдер GL но уже сделал шейдер HLSL и хочу прикрутить его. И еще вопрос на чем проше это реализовать OpenGL или DirectX. Просто есть шейдер и на GLSL хотелось бы попробывать и на DX и на GL.
я все так же настаиваю на том что бы Mekrod прочитал книжку !!!
советую Ф.ЛУНА
Тема в архиве.