幻境
Leo's Dreamland
登录
注册
全站
当前博客
空间
博客
好友
相册
论坛
留言
用户操作
[即时聊天]
[发私信]
[加为好友]
Leo
ID:Cancer05
共
18231
次访问,排名
6880(1)
,好友
0
人,关注者
1
人。
Cancer05的文章
原创 9 篇
翻译 2 篇
转载 10 篇
评论 9 篇
最近评论
Cancer05:
Ogre本身的渲染效果比较好了,当然烘培个光照贴图效果就更好了,我现在输出场景用OgreMax插件,www.ogremax.com,压缩包里有个chm帮助文档,里面有一个例子就是Create Light Maps with the 3DS Max 'Render to Texture' Feature,可以看一下
虚拟的鱼:
你好,我有问题想要请教,在用 Ogre 做虚拟的场景的时候,是不是也要用到烘培贴图?具体应该如何操作呢?还请您多多指点
小陈:
找不到sence.osm
Gary:
我在for 下面打印(pObject->getMovableType()).c_str()
。结果只有Camera,TerrainMipMap。是不是循环中没有全部查找MovableObject...我肯定有建Entity。谢谢
小王:
为什么我在3D中的oFusion View看不到材质?都是黄色和黑色
文章分类
Ogre
(RSS)
存档
(RSS)
网络
(RSS)
收藏
相册
D3D
Ogre
Ogre3D中文网
Ogre官方网站教程
Ogre官方网站首页
Paging Scene Manager
OgreAddons
nxogre官方网站
oFusion官方网站首页
其他
摄像头游戏引擎开发
存档
2008年11月(1)
2008年01月(1)
2007年07月(4)
2007年05月(1)
2007年04月(5)
2007年03月(9)
软件项目交易
订阅我的博客
摄像头编程
收藏
新一篇: vb.net連接攝像頭
|
旧一篇: 把你的摄像头变成3D扫描器
using
System;
using
System.Runtime.InteropServices;
namespace
webcam
...
{
/**/
/**/
/**/
///
///
avicap 的摘要说明。
///
public
class
showVideo
...
{
//
showVideo calls
[DllImport(
"
avicap32.dll
"
)]
public
static
extern
IntPtr capCreateCaptureWindowA(
byte
[] lpszWindowName,
int
dwStyle,
int
x,
int
y,
int
nWidth,
int
nHeight, IntPtr hWndParent,
int
nID);
[DllImport(
"
avicap32.dll
"
)]
public
static
extern
bool
capGetDriverDescriptionA(
short
wDriver,
byte
[] lpszName,
int
cbName,
byte
[] lpszVer,
int
cbVer);
[DllImport(
"
User32.dll
"
)]
public
static
extern
bool
SendMessage(IntPtr hWnd,
int
wMsg,
bool
wParam,
int
lParam);
[DllImport(
"
User32.dll
"
)]
public
static
extern
bool
SendMessage(IntPtr hWnd,
int
wMsg,
short
wParam,
int
lParam);
[DllImport(
"
User32.dll
"
)]
public
static
extern
bool
SendMessage(IntPtr hWnd,
int
wMsg,
short
wParam, FrameEventHandler lParam);
[DllImport(
"
User32.dll
"
)]
public
static
extern
bool
SendMessage(IntPtr hWnd,
int
wMsg,
int
wParam,
ref
BITMAPINFO lParam);
[DllImport(
"
User32.dll
"
)]
public
static
extern
int
SetWindowPos(IntPtr hWnd,
int
hWndInsertAfter,
int
x,
int
y,
int
cx,
int
cy,
int
wFlags);
[DllImport(
"
avicap32.dll
"
)]
public
static
extern
int
capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat,
int
wSize);
//
Constants
public
const
int
WM_USER
=
0x400
;
public
const
int
WS_CHILD
=
0x40000000
;
public
const
int
WS_VISIBLE
=
0x10000000
;
public
const
int
SWP_NOMOVE
=
0x2
;
public
const
int
SWP_NOZORDER
=
0x4
;
public
const
int
WM_CAP_DRIVER_CONNECT
=
WM_USER
+
10
;
public
const
int
WM_CAP_DRIVER_DISCONNECT
=
WM_USER
+
11
;
public
const
int
WM_CAP_SET_CALLBACK_FRAME
=
WM_USER
+
5
;
public
const
int
WM_CAP_SET_PREVIEW
=
WM_USER
+
50
;
public
const
int
WM_CAP_SET_PREVIEWRATE
=
WM_USER
+
52
;
public
const
int
WM_CAP_SET_VIDEOFORMAT
=
WM_USER
+
45
;
//
Structures
[StructLayout(LayoutKind.Sequential)]
public
struct
VIDEOHDR
...
{
[MarshalAs(UnmanagedType.I4)]
public
int
lpData;
[MarshalAs(UnmanagedType.I4)]
public
int
dwBufferLength;
[MarshalAs(UnmanagedType.I4)]
public
int
dwBytesUsed;
[MarshalAs(UnmanagedType.I4)]
public
int
dwTimeCaptured;
[MarshalAs(UnmanagedType.I4)]
public
int
dwUser;
[MarshalAs(UnmanagedType.I4)]
public
int
dwFlags;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
4
)]
public
int
[] dwReserved;
}
[StructLayout(LayoutKind.Sequential)]
public
struct
BITMAPINFOHEADER
...
{
[MarshalAs(UnmanagedType.I4)]
public
Int32 biSize;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biWidth;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biHeight;
[MarshalAs(UnmanagedType.I2)]
public
short
biPlanes;
[MarshalAs(UnmanagedType.I2)]
public
short
biBitCount;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biCompression;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biSizeImage;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biXPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biYPelsPerMeter;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biClrUsed;
[MarshalAs(UnmanagedType.I4)]
public
Int32 biClrImportant;
}
[StructLayout(LayoutKind.Sequential)]
public
struct
BITMAPINFO
...
{
[MarshalAs(UnmanagedType.Struct, SizeConst
=
40
)]
public
BITMAPINFOHEADER bmiHeader;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
1024
)]
public
Int32[] bmiColors;
}
public
delegate
void
FrameEventHandler(IntPtr lwnd, IntPtr lpVHdr);
//
Public methods
public
static
object
GetStructure(IntPtr ptr, ValueType structure)
...
{
return
Marshal.PtrToStructure(ptr, structure.GetType());
}
public
static
object
GetStructure(
int
ptr, ValueType structure)
...
{
return
GetStructure(
new
IntPtr(ptr), structure);
}
public
static
void
Copy(IntPtr ptr,
byte
[] data)
...
{
Marshal.Copy(ptr, data,
0
, data.Length);
}
public
static
void
Copy(
int
ptr,
byte
[] data)
...
{
Copy(
new
IntPtr(ptr), data);
}
public
static
int
SizeOf(
object
structure)
...
{
return
Marshal.SizeOf(structure);
}
}
//
Web Camera Class
public
class
WebCamera
...
{
//
Constructur
public
WebCamera(IntPtr handle,
int
width,
int
height)
...
{
mControlPtr
=
handle;
mWidth
=
width;
mHeight
=
height;
}
//
delegate for frame callback
public
delegate
void
RecievedFrameEventHandler(
byte
[] data);
public
event
RecievedFrameEventHandler RecievedFrame;
private
IntPtr lwndC;
//
Holds the unmanaged handle of the control
private
IntPtr mControlPtr;
//
Holds the managed pointer of the control
private
int
mWidth;
private
int
mHeight;
private
showVideo.FrameEventHandler mFrameEventHandler;
//
Delegate instance for the frame callback - must keep alive! gc should NOT collect it
//
Close the web camera
public
void
CloseWebcam()
...
{
this
.capDriverDisconnect(
this
.lwndC);
}
//
start the web camera
public
void
StartWebCam()
...
{
byte
[] lpszName
=
new
byte
[
100
];
byte
[] lpszVer
=
new
byte
[
100
];
showVideo.capGetDriverDescriptionA(
0
, lpszName,
100
, lpszVer,
100
);
this
.lwndC
=
showVideo.capCreateCaptureWindowA(lpszName, showVideo.WS_VISIBLE
+
showVideo.WS_CHILD,
0
,
0
, mWidth, mHeight, mControlPtr,
0
);
if
(
this
.capDriverConnect(
this
.lwndC,
0
))
...
{
this
.capPreviewRate(
this
.lwndC,
66
);
this
.capPreview(
this
.lwndC,
true
);
showVideo.BITMAPINFO bitmapinfo
=
new
showVideo.BITMAPINFO();
bitmapinfo.bmiHeader.biSize
=
showVideo.SizeOf(bitmapinfo.bmiHeader);
bitmapinfo.bmiHeader.biWidth
=
352
;
bitmapinfo.bmiHeader.biHeight
=
288
;
bitmapinfo.bmiHeader.biPlanes
=
1
;
bitmapinfo.bmiHeader.biBitCount
=
24
;
this
.capSetVideoFormat(
this
.lwndC,
ref
bitmapinfo, showVideo.SizeOf(bitmapinfo));
this
.mFrameEventHandler
=
new
showVideo.FrameEventHandler(FrameCallBack);
this
.capSetCallbackOnFrame(
this
.lwndC,
this
.mFrameEventHandler);
showVideo.SetWindowPos(
this
.lwndC,
0
,
0
,
0
, mWidth, mHeight,
6
);
}
}
//
private functions
private
bool
capDriverConnect(IntPtr lwnd,
short
i)
...
{
return
showVideo.SendMessage(lwnd, showVideo.WM_CAP_DRIVER_CONNECT, i,
0
);
}
private
bool
capDriverDisconnect(IntPtr lwnd)
...
{
return
showVideo.SendMessage(lwnd, showVideo.WM_CAP_DRIVER_DISCONNECT,
0
,
0
);
}
private
bool
capPreview(IntPtr lwnd,
bool
f)
...
{
return
showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_PREVIEW, f,
0
); }
private
bool
capPreviewRate(IntPtr lwnd,
short
wMS)
...
{
return
showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_PREVIEWRATE, wMS,
0
);
}
private
bool
capSetCallbackOnFrame(IntPtr lwnd, showVideo.FrameEventHandler lpProc)
...
{
return
showVideo.SendMessage(lwnd, showVideo.WM_CAP_SET_CALLBACK_FRAME,
0
, lpProc);
}
public
bool
capSetVideoFormat(IntPtr hCapWnd,
ref
showVideo.BITMAPINFO BmpFormat,
int
CapFormatSize)
...
{
return
showVideo.SendMessage(hCapWnd, showVideo.WM_CAP_SET_VIDEOFORMAT, CapFormatSize,
ref
BmpFormat);
}
public
void
FrameCallBack(IntPtr lwnd, IntPtr lpVHdr)
...
{
showVideo.VIDEOHDR videoHeader
=
new
showVideo.VIDEOHDR();
byte
[] VideoData;
videoHeader
=
(showVideo.VIDEOHDR)showVideo.GetStructure(lpVHdr, videoHeader);
VideoData
=
new
byte
[videoHeader.dwBytesUsed];
showVideo.Copy(videoHeader.lpData, VideoData);
if
(
this
.RecievedFrame
!=
null
)
this
.RecievedFrame(VideoData);
}
}
}
在程序中调用
wc
=
new
webcam.WebCamera(panel1.Handle, panel1.Width, panel1.Height);
wc.StartWebCam();
C#控制摄像头程序
此程序只是将网上流行的程序进行封装了,大家需要的话可以下载!
/Files/wpwen/CameraDemo.rar
本文是借助avicap32.dll库来驱动摄像头。做到了抓图、录像功能。
using
System;
using
System.Runtime.InteropServices;
using
System.Drawing;
using
System.Drawing.Imaging;
namespace
using
System;
using
System.Runtime.InteropServices;
using
System.Drawing;
using
System.Drawing.Imaging;
namespace
PickHead
...
{
/**/
///
<summary>
///
一个控制摄像头的类
///
</summary>
public
class
Pick
...
{
private
const
int
WM_USER
=
0x400
;
private
const
int
WS_CHILD
=
0x40000000
;
private
const
int
WS_VISIBLE
=
0x10000000
;
private
const
int
WM_CAP_START
=
WM_USER;
private
const
int
WM_CAP_STOP
=
WM_CAP_START
+
68
;
private
const
int
WM_CAP_DRIVER_CONNECT
=
WM_CAP_START
+
10
;
private
const
int
WM_CAP_DRIVER_DISCONNECT
=
WM_CAP_START
+
11
;
private
const
int
WM_CAP_SAVEDIB
=
WM_CAP_START
+
25
;
private
const
int
WM_CAP_GRAB_FRAME
=
WM_CAP_START
+
60
;
private
const
int
WM_CAP_SEQUENCE
=
WM_CAP_START
+
62
;
private
const
int
WM_CAP_FILE_SET_CAPTURE_FILEA
=
WM_CAP_START
+
20
;
private
const
int
WM_CAP_SEQUENCE_NOFILE
=
WM_CAP_START
+
63
;
private
const
int
WM_CAP_SET_OVERLAY
=
WM_CAP_START
+
51
;
private
const
int
WM_CAP_SET_PREVIEW
=
WM_CAP_START
+
50
;
private
const
int
WM_CAP_SET_CALLBACK_VIDEOSTREAM
=
WM_CAP_START
+
6
;
private
const
int
WM_CAP_SET_CALLBACK_ERROR
=
WM_CAP_START
+
2
;
private
const
int
WM_CAP_SET_CALLBACK_STATUSA
=
WM_CAP_START
+
3
;
private
const
int
WM_CAP_SET_CALLBACK_FRAME
=
WM_CAP_START
+
5
;
private
const
int
WM_CAP_SET_SCALE
=
WM_CAP_START
+
53
;
private
const
int
WM_CAP_SET_PREVIEWRATE
=
WM_CAP_START
+
52
;
private
IntPtr hWndC;
private
bool
bStat
=
false
;
private
IntPtr mControlPtr;
private
int
mWidth;
private
int
mHeight;
private
int
mLeft;
<