颜色

原创 2013年12月03日 11:12:13
在Direct3D中,颜色用RGB三元组来表示,RGB数据可用两种不同的数据结构来保存,第一种是D3DCOLOR,它实际与DWORD完全相同,共有32位,D3DCOLOR类型中的各位被分成4个八位项同,每顶存放了一种颜色的分量值,
             32bit
alpha red,green,blue

typedef DWORD D3DCOLOR
#define D3DCOLOR_ARGB(a,r,g,b) \
    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))

#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)

#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)

//亮度,0-1
#define D3DCOLOR_COLORVALUE(r,g,b,a) \

    D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))


着色模式 看下面测试代码

#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")

IDirect3D9* g_pD3d = NULL;
IDirect3DDevice9* g_pDevice = NULL;
IDirect3DVertexBuffer9 * triangle= NULL;

struct ColorVertex{
	float x,y,z;
	D3DCOLOR clr;
	static const DWORD FVF;
};
const DWORD ColorVertex::FVF = D3DFVF_DIFFUSE | D3DFVF_XYZ;

bool initd3d(HWND hwnd)
{
	g_pD3d = Direct3DCreate9(D3D_SDK_VERSION);

	D3DDISPLAYMODE display;
	ZeroMemory(&display,sizeof(display));

	g_pD3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&display);

	D3DPRESENT_PARAMETERS d3dpp;
	ZeroMemory(&d3dpp,sizeof(d3dpp));

	d3dpp.BackBufferFormat = display.Format;
	d3dpp.BackBufferHeight = 600;
	d3dpp.BackBufferWidth  = 800;
	d3dpp.Windowed = TRUE;
	d3dpp.hDeviceWindow = hwnd;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

	g_pD3d->CreateDevice(D3DADAPTER_DEFAULT,
		D3DDEVTYPE_HAL,
		hwnd,
		D3DCREATE_HARDWARE_VERTEXPROCESSING,
		&d3dpp,
		&g_pDevice);

	return true;
}

bool InitObject()
{
	ColorVertex t[3]={
		-1.0f,0.0f,2.0f,D3DCOLOR_XRGB(255,0,0),
		 0.0f,1.0f,2.0f,D3DCOLOR_XRGB(0,255,0),
		 1.0f,0.0f,2.0f,D3DCOLOR_XRGB(0,0,255),
	};


	g_pDevice->CreateVertexBuffer(3*sizeof(ColorVertex),
		D3DUSAGE_WRITEONLY,
		ColorVertex::FVF,
		D3DPOOL_MANAGED,
		&triangle,
		0);

	void *p = NULL;

	triangle->Lock(0,sizeof(t),(void**)&p,0);
	memcpy(p,t,sizeof(t));
	triangle->Unlock();

	D3DXMATRIX proj;
	D3DXMatrixPerspectiveFovLH(&proj,
		D3DX_PI*0.5f,
		float(800)/float(600),
		1.0f,
		1000.0f);
	g_pDevice->SetTransform(D3DTS_PROJECTION,&proj);

	g_pDevice->SetRenderState(D3DRS_LIGHTING,false);
	return true;

}

void RenderScence()
{
	g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET,0xffffffff,1.0f,0);

	g_pDevice->BeginScene();

	g_pDevice->SetStreamSource(0,triangle,0,sizeof(ColorVertex));
	g_pDevice->SetFVF(ColorVertex::FVF);


	//draw left
	D3DXMATRIX world;
	D3DXMatrixTranslation(&world,-1.25f,0.0f,0.0f);
	g_pDevice->SetTransform(D3DTS_WORLD,&world);

	g_pDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT);
	g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);

	/////draw right
	D3DXMatrixTranslation(&world,1.25f,0.0f,0.0f);
	g_pDevice->SetTransform(D3DTS_WORLD,&world);

	g_pDevice->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
	g_pDevice->DrawPrimitive( D3DPT_TRIANGLELIST,0,1);

	g_pDevice->EndScene();
	g_pDevice->Present(0,0,0,0);
}

void Shutdown()
{
	if(g_pD3d)
	{
		g_pD3d->Release();
	}
	if(g_pDevice)
	{
		g_pDevice->Release();
	}
}


LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("COLOR");
    HWND         hwnd;
    MSG          msg;
    WNDCLASSEX   wndclassex = {0};
    wndclassex.cbSize        = sizeof(WNDCLASSEX);
    wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
    wndclassex.lpfnWndProc   = WndProc;
    wndclassex.cbClsExtra    = 0;
    wndclassex.cbWndExtra    = 0;
    wndclassex.hInstance     = hInstance;
    wndclassex.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclassex.lpszMenuName  = NULL;
    wndclassex.lpszClassName = szAppName;
    wndclassex.hIconSm       = wndclassex.hIcon;
	
    if (!RegisterClassEx (&wndclassex))
    {
        MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
        return 0;
    }
    hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, 
		                  szAppName, 
        		          TEXT ("WindowTitle"),
                		  WS_OVERLAPPEDWINDOW,
		                  CW_USEDEFAULT, 
        		          CW_USEDEFAULT, 
                		  800, 
		                  600, 
        		          NULL, 
                		  NULL, 
		                  hInstance,
        		          NULL); 

	initd3d(hwnd);
	InitObject();
						  
    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);
	
    while (msg.message!=WM_QUIT)
    {
		if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
		{
			TranslateMessage (&msg);
			DispatchMessage (&msg);
		}
		else
		{
			RenderScence();
		}
    }
	Shutdown();
    return msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage (0);
        return (0);
    }
    return DefWindowProc (hwnd, message, wParam, lParam);
}

颜色空间那些事儿

本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ ...
  • hit2015spring
  • hit2015spring
  • 2016年09月16日 17:23
  • 2622

UIImage修改图片颜色

首先,我们放个正常的图片.这个图片应该是从百度地图sdk里取得 -(void)build { self.view.backgroundColor = [UIColor blackColor]...
  • xutianyu930818
  • xutianyu930818
  • 2016年03月03日 14:30
  • 3878

【Qt】标准颜色对话框类

标准颜色对话框类是在标准文件对话框的基础之上添加一些布局实现的,效果如下: click "颜色标准对话框实例" chose the one you love: add the code...
  • LDan508
  • LDan508
  • 2016年05月12日 23:05
  • 2912

颜色名称与RGB对照表

local tName2Color = { -- 0xAABBGGRR aliceblue = 0xFFFFF8F0, antiquewhite = 0xFFD7EB...
  • sinat_24341745
  • sinat_24341745
  • 2015年03月20日 20:09
  • 1625

Echart颜色设置

最近在做的项目用到Echarts,由于客户对图表颜色的要求,找了很多资料,终于对柱状图,饼图,仪表盘图的颜色设置有了一个了解,供大家参考学习。 Echarts配置项手册:http://echarts....
  • zhanlandemeng
  • zhanlandemeng
  • 2016年04月27日 10:35
  • 939

提供一些常用的颜色

/* * Copyright (C) 2013 Peng fei Pan * * Licensed under the Apache License, Version 2.0 (the "L...
  • wangbadan007007
  • wangbadan007007
  • 2015年10月13日 10:28
  • 763

openGL之光照2(材料、颜色追踪、光源)---openGL学习笔记(十)

材料: 我们知道,决定物体实际颜色的是散射光,确切的说是材料的散射光反射率,而且openGL中,我们一般把材料的环境光和反射光反射率设置成同样的值,那么在设置过了全局环境光之后,就要设置材料的反射率...
  • a358333644
  • a358333644
  • 2016年03月09日 17:56
  • 762

颜色特征提取(一)------颜色直方图

颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献.由于颜色对图像或图像区域的方向、大小等变化不敏感,所...
  • langb2014
  • langb2014
  • 2015年05月07日 10:47
  • 6358

颜色特征提取(四)------颜色相关图

颜色相关图(color correlogram)是图像颜色分布的另一种表达方式[16]。这种特征不但刻画了某一种颜色的像素数量占整个图像的比例,还反映了不同颜色对之间的空间相关性。实验表明,颜色相关图...
  • langb2014
  • langb2014
  • 2015年05月10日 08:33
  • 4069

一个轻量级的RGB颜色选择器--jscolor

官方网站:http://www.jscolor.com/  点击打开链接 之前在网上找了一下,没有找到详细的文档,只是讲了基本的使用方法,自己稍微研究了一下,再总结下吧。 首先在官网下载文件,http...
  • huangxin112
  • huangxin112
  • 2017年07月10日 09:29
  • 1467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:颜色
举报原因:
原因补充:

(最多只允许输入30个字)