Войти
ПрограммированиеФорумГрафика

SHADER-ART CONTEST [сок] (4 стр)

Страницы: 13 4 5 611 Следующая »
#45
22:41, 22 авг 2009

>OpenGL под твой шейдер
oO

#46
23:02, 22 авг 2009

iArt
Все сто всяких oO лучше подсказал что нибудь по шейдарам. и прошу без всеки издевок я всетоки новичек и
и прошу помощи у знатоков дела. Лубой помощи буду рад.

И каждый мастер в своем деле,  но если каждый будет помогать друг другу то все станут чуть чуть лучше разбираться в ремесле каждого из мастеров.

#47
23:04, 22 авг 2009

Mekrod
OpenGL не надо качать, чтобы шейдеры посмотреть.
Для этого нужна программа, называется notepad.exe.

#48
23:06, 22 авг 2009

SNVampyre
Спасибо за подсказку. Я то просто и незнал об этом.

#49
23:16, 22 авг 2009

> Если ты понимаешь о чем идет речь - расскажу еще пару "фич", а если нет, то тебе следует еще немного подучить шейдеры. Если хочешь могу скинуть свой старый шейдер стекла на GLSL

после этого вы пишите
>блин, Sergio666 это круто есди можешь скинь. И где можно скачать OpenGL под твой шейдер чтобы можно было просмотреть его.

???
вам стоило написать что то вроде
>Если ты понимаешь о чем идет речь
нет подскажите что почитать про шейдеры ....

однако вы уверены что знаете и тут же пишите
>скачать OpenGL под твой шейдер

я просто удивился вашему ответу ....

#50
23:39, 22 авг 2009

iArt
Мне просто интересно было посмотреть на исзодник шейдара под GLSL и не знал что их можно просмотреть через простой текстовый редектор. И что тут такого. Sergio666 любезно предложил мне выложить свой старый шейдар. Я принел его предложение.
Понимаешь я уже неделю лазию в инете что бы найти хоть одну книгу на радном языке по шейдерам на HLSL. Но ни где не могу найти. Так что пришлось подумать о GLSL. Ведь самому хочется создавать шейдеры как Sergio666 или RaZOR и другие парни которые участвовали предыдущем конкурсе. А не кто кроме Sergio666 помощи и не предложил, а так как он разбирается в GLSL я и попросил выложить его старый шейдер.

#51
23:44, 22 авг 2009

Ну тогда выкладываю. Комментировать буду потом - сейчас уже нет времени

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);
}
#52
23:57, 22 авг 2009

Sergio666
спасибо. Нет, Большое спасибо.

#53
0:00, 23 авг 2009

Mekrod
Ну попытайся пока разобраться сам... :)
Если что - задавай вопросы

#54
0:15, 23 авг 2009

Mekrod
> найти хоть одну книгу на радном языке
OpenGL. Трехмерная графика и язык программирования шейдеров.djvu
погугли
это если русский родной..

#55
0:47, 23 авг 2009

Троль отaке!

#56
15:14, 23 авг 2009

Привет всем помогите подключить шейдер к модели вот пример программного кода вывода модели

подскажите как подключить сюда шейдер. Если у кого есть пример то если можно выложите ссылочку.
В зарание благодарен. Еше раз спасибо 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);
}

#57
15:23, 23 авг 2009

Mekrod
тыже на DX пишеш а просиш шейдер под GL
вопрос зачем?

#58
15:49, 23 авг 2009

Chaos_Optima
Да просил шейдер GL но уже сделал шейдер HLSL и хочу прикрутить его. И еще вопрос на чем  проше это реализовать OpenGL или DirectX. Просто есть шейдер и на GLSL хотелось бы попробывать и на DX и на GL.

#59
17:45, 23 авг 2009

я все так же настаиваю на том что бы Mekrod прочитал книжку !!!
советую Ф.ЛУНА

Страницы: 13 4 5 611 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.