2012年11月15日 星期四

C# WPF OpenGL using SharpGL



動態教學:Open

開發環境:
Visual Studio 2010
SharpGL 2.0 - SharpGL Binaries.zip
(SharpGL is a C# library that allows you to use OpenGL in your .NET Framework based application with ease!)

WPF (MainWindow.xaml):
<Window x:Class="WPFOpenGL.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <sharpGL:OpenGLControl OpenGLDraw="OpenGLControl_OpenGLDraw" />
    </Grid>
</Window>

C# (MainWindow.xaml.cs):
using System;
using System;
using System.Windows;
using System.Windows.Input;
using SharpGL;

namespace WPFOpenGL
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL instance that's been passed to us.
            OpenGL gl = args.OpenGL;

            //  Clear the color and depth buffers.
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            //  Reset the modelview matrix.
            gl.LoadIdentity();

            //  Move the geometry into a fairly central position.
            gl.Translate(-1.5f, 0.0f, -6.0f);

            //  Draw a pyramid. First, rotate the modelview matrix.
            gl.Rotate(rotatePyramid, 0.0f, 1.0f, 0.0f);

            //  Start drawing triangles.
            gl.Begin(OpenGL.GL_TRIANGLES);

            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);

            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);

            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);

            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(0.0f, 1.0f, 0.0f);
            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);

            gl.End();

            //  Reset the modelview.
            gl.LoadIdentity();

            //  Move into a more central position.
            gl.Translate(1.5f, 0.0f, -7.0f);

            //  Rotate the cube.
            gl.Rotate(rquad, 1.0f, 1.0f, 1.0f);

            //  Provide the cube colors and geometry.
            gl.Begin(OpenGL.GL_QUADS);

            gl.Color(0.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, 1.0f, -1.0f);
            gl.Vertex(-1.0f, 1.0f, -1.0f);
            gl.Vertex(-1.0f, 1.0f, 1.0f);
            gl.Vertex(1.0f, 1.0f, 1.0f);

            gl.Color(1.0f, 0.5f, 0.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);

            gl.Color(1.0f, 0.0f, 0.0f);
            gl.Vertex(1.0f, 1.0f, 1.0f);
            gl.Vertex(-1.0f, 1.0f, 1.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);

            gl.Color(1.0f, 1.0f, 0.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Vertex(-1.0f, 1.0f, -1.0f);
            gl.Vertex(1.0f, 1.0f, -1.0f);

            gl.Color(0.0f, 0.0f, 1.0f);
            gl.Vertex(-1.0f, 1.0f, 1.0f);
            gl.Vertex(-1.0f, 1.0f, -1.0f);
            gl.Vertex(-1.0f, -1.0f, -1.0f);
            gl.Vertex(-1.0f, -1.0f, 1.0f);

            gl.Color(1.0f, 0.0f, 1.0f);
            gl.Vertex(1.0f, 1.0f, -1.0f);
            gl.Vertex(1.0f, 1.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, 1.0f);
            gl.Vertex(1.0f, -1.0f, -1.0f);

            gl.End();

            //  Flush OpenGL.
            gl.Flush();

            //  Rotate the geometry a bit.
            rotatePyramid += 3.0f;
            rquad -= 3.0f;
        }
        float rotatePyramid = 0;
        float rquad = 0; 
    }
}

Reference: Using OpenGL in a WPF Application

2012年10月17日 星期三

VC++啟動OpenMP



如圖所示,將選項選為『Yes (/openmp)』即可。

查詢期刊論文IF(Impact Factor)值

影響係數:Impact Factor

如果妳不在學校時:
http://impactfactor.cn/

如果妳在學校時:

網址已改:http://jcr.incites.thomsonreuters.com/

Web of Knowledge網站:http://wokinfo.com/

其工具就藏在...


再進到這裡...


就是它了。

使用Maxima計算eigenvalues與eigenvactor



語法:
kill(all);
M: matrix(
 [6,sqrt(2),sqrt(2),0],
 [sqrt(2),5,1,0],
 [sqrt(2),1,5,0],
 [0,0,0,4]
);
eigenvalues(M);
eigenvectors(M);

2012年9月22日 星期六

VS2010自訂副檔名類型設定高亮



後記:
如圖所示,在寫CUDA Program時會遇到副檔名cu類型的檔案,沒有進行程式碼高亮處理,如圖設定後程式碼就會有顏色區別了。

2012年9月18日 星期二

VC2010設定成x64環境

事不宜遲開始講吧,
其實Visual Studio並沒有分所謂的x86或x64版本,
x86要改成x64編譯環境有三個地方要注意,
第一個是在安裝Visual Studio 2010的時候要安裝x64 compiler,
如下圖要打勾:


第二件事是要設定專案的Target Machine,
如圖在 Project > Property
找到 Configuration Properties > Linker > Advanced
將 Target Machine 設定改成 x64:


第三步驟是新增x64編譯,讓VC能夠使用x64編譯:


如此一來VC就會擁有x64編譯環境了。

2012年8月28日 星期二

VC++ VTK範例教學



VtkSDI範例動態教學:
Click me!!

VTK Include設定:
Configuration Properties > C/C++ > General > Additional Include Directories
C:\VTK\bin_5.10.0;C:\VTK\src_5.10.0\Common;C:\VTK\src_5.10.0\Filtering;C:\VTK\src_5.10.0\Graphics;C:\VTK\src_5.10.0\Hybrid;C:\VTK\src_5.10.0\Imaging;C:\VTK\src_5.10.0\IO;C:\VTK\src_5.10.0\Rendering;C:\VTK\src_5.10.0\Widgets

VTK Library設定:
Configuration Properties > Linker > General > Additional Library Directories
Release
C:\VTK\bin_5.10.0\bin\Release
Debug
C:\VTK\bin_5.10.0\bin\Debug

Configuration Properties > Linker > Input > Additional Dependencies
vtkCommon.lib;vtkFiltering.lib;vtkGraphics.lib;vtkHybrid.lib;vtkImaging.lib;vtkIO.lib;vtkjpeg.lib;vtkpng.lib;vtkRendering.lib;vtkzlib.lib

其他文獻:

VTK教學
http://vtkblog.blogspot.tw/

VTK-VC++安裝設定
http://www.cs.auckland.ac.nz/~jli023/vtk/BuildandinstallVTKbinaries.htm

STL Wiki範例
http://www.vtk.org/Wiki/VTK/Examples/Cxx/IO/WriteSTL

原始碼請見:
http://codeboxy.blogspot.tw/2012/08/VtkSDI.html

2012年8月27日 星期一

使用CMake建置VC++ VTK函式庫



詳細動態教學如下:
Click me!!

使用軟體:
Visual Studio 2010 VC10
cmake-2.8.9-win32-x86.zip
vtk-5.10.0.zip

使用路徑:
Sourse Folder
C:\VTK\src_5.10.0
Binaries Folder
C:\VTK\bin_5.10.0

備註事項:
1. Configure建不過可能是Visual Studio軟體沒更新

2012年8月23日 星期四

使用 OpenSSL 建立憑證 (Windows)



必須先安裝Apache,請參考這篇

首先切換到Apache的bin目錄:
cd /d C:\Apache24\bin

使用OpenSSL建立『server.key』私鑰檔案,並輸入自訂短密碼:
openssl genrsa -des3 -out server.key 2048

使用私鑰去建立『server.csr』憑證請求檔:
openssl req -new -key server.key -out server.csr -config ..\conf\openssl.cnf

在建立憑證請求檔時會詢問相關資訊,下面為參考設定範例:
Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Chiayi Country
Organization Name (eg, company) [Internet Widgits Pty Ltd]:National Chung Cheng University
Organizational Unit Name (eg, section) []:CADCAM
Common Name (e.g. server FQDN or YOUR name) []:cad.me.ccu.edu.tw
Email Address []:ccuboxy@cad.me.ccu.edu.tw

使用憑證請求檔及私鑰檔去建立3650天的X.509格式憑證的CRT憑證檔:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

以上步驟完成後會得到共三個檔案『server.key』、『server.csr』、『server.crt』
請將三個檔案移駕到『C:\Apache24\conf』目錄下。

到『C:\Apache24\conf』打開『httpd.conf』檔案找到以下兩句並取消註解:
LoadModule ssl_module modules/mod_ssl.so
Include ./conf/extra/httpd-ssl.conf

到『C:\Apache24\conf\extra』打開『httpd-ssl.conf』檔案找到『SSLSessionCache』並註解掉:
#SSLSessionCache        "shmcb:c:/Apache24/logs/ssl_scache(512000)"

開啟瀏覽器進入『https://localhost/』測試是否成功。

完成。



不支援Win32的問題解決方法:
1、複製 server.key 為 server.key.org
2、對 server.key.org 解密 openssl rsa -in server.key.org -out server.key 輸入密碼解密成功
3、打開 httpd-ssl.conf 找到 SSLPassPhraseDialog builtin 在前面加上#

2012年8月20日 星期一

VTK ucb error problem



當使用Visual Studio 2008編譯VTK出現ucb錯誤時,可以打開這個檔案:
VTKSrc\Utilities\vtkhdf5\ConfigureChecks.cmake

把這行用#號給註解掉:
CHECK_LIBRARY_EXISTS_CONCAT ("ucb"    gethostname  H5_HAVE_LIBUCB)

後記:
初步得出的一個結果是,該錯誤似乎是會發生在Windows 7 64位元的環境下,使用Visual Studio 2008或2010版本也都可能發生,原因是找不到ucb.lib檔案。

FYI:
http://vtk.1045678.n5.nabble.com/Build-from-GIT-Master-Linker-errors-tp5429952p5454164.html

2012年8月14日 星期二

Windows Presentation Foundation (WPF)教學文獻



教學網站:
WPF Tutorial.net

比較使用XAML與標準程式碼的差異,
其實使用XAML就像是在寫HTML網頁,
簡單來說就是將設計與程式碼分開來 :)

XAML語法格式:
<StackPanel>
    <TextBlock Margin="20">Welcome to the World of XAML</TextBlock>
    <Button Margin="10" HorizontalAlignment="Right">OK</Button>
</StackPanel>

C#原始碼格式:
// Create the StackPanel
StackPanel stackPanel = new StackPanel();
this.Content = stackPanel;
 
// Create the TextBlock
TextBlock textBlock = new TextBlock();
textBlock.Margin = new Thickness(10);
textBlock.Text = "Welcome to the World of XAML";
stackPanel.Children.Add(textBlock);
 
// Create the Button
Button button = new Button();
button.Margin= new Thickness(20);
button.Content = "OK";
stackPanel.Children.Add(button);

由語法與程式碼就可明顯發現兩者的差異性,而其顯現的結果皆相同。

2012年8月13日 星期一

使用番茄高亮變數



說明:
啟用Visual Assist X(番茄)內的變數高亮功能方法。

CSharp (C#) 教學文獻

//Copyright (C) Microsoft Corporation.  All rights reserved.
// Hello3.cs
// arguments: A B C D
using System;

public class Hello3
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
        Console.WriteLine("You entered the following {0} command line arguments:", args.Length );
        for (int i=0; i < args.Length; i++)
        {
            Console.WriteLine("{0}", args[i]);
        }
    }
}

C#(CSharp)範例教學:
http://msdn.microsoft.com/zh-tw/library/9ys06tc9(v=vs.90)

範例下載:
http://code.msdn.microsoft.com/csharpsamples

後記:
這是Microsoft Developer Network(MSDN)上的中文教學。

2012年8月10日 星期五

建構Apache2.4.2+PHP5.4.5網際環境



詳細動態教學如下:
Click me!!

相關檔案來源:
httpd-2.4.2-win32-ssl_0.9.8.zip (Apache 2.4.2 Same as above, except build with OpenSSl 0.9.8x instead of 1.0.1c)
php-5.4.5-Win32-VC9-x86.zip (PHP 5.4 (5.4.5) VC9 x86 Thread Safe)(Old file)
php5apache2_4.dll-php-5.4-win32.zip (VC9 - PHP Handler modules for php 5.4)
vcredist_x86.exe (Microsoft Visual C++ 2010 可轉散發套件 (x86))

相關語法如下

批次啟動檔(Start.bat):
@echo off
bin\httpd.exe -k install -n "Apache2.4"
bin\httpd.exe -k start
start bin\ApacheMonitor.exe

批次停止檔(Stop.bat):
@echo off
bin\httpd.exe -k stop
bin\httpd.exe -k uninstall -n "Apache2.4"
TASKKILL /F /IM ApacheMonitor.exe

Apache設定檔(httpd.conf):
PHPIniDir "C:/PHP/"
LoadModule php5_module "C:/PHP/php5apache2_4.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.phtml index.htm index.html index.php index.php3

PHP設定檔(php.ini):
extension_dir = "C:/PHP/ext"

PHPInfo程式(phpinfo.php):
<?php phpinfo() ?>

2012年8月8日 星期三

VS環境下好用的PHP開發工具VS.PHP



官方網站:PHP IDE for Visual Studio | Jcx.Software Corp.

簡  介:
VS.Php is a PHP IDE (integrated development environment) based on Visual Studio IDE. With VS.Php you can design, develop, debug and deploy PHP applications within the Visual Studio IDE. VS.Php key features are around providing rich PHP editor as well as Smarty editing capabilities. Also is the ability to debug PHP scripts locally as well as remotely.

簡單範例:
Click me!!

範例程式:
<?php
class MyClass
{
    public function hello() {
        for ($i = 0; $i < 10; $i++)
        {
            echo "Hello<br />";
        }
    }
}
$hello = new MyClass();
$hello->hello();
?>