水波纹算法
1. 求一个能实现屏幕水波纹效果的vb代码
'补模块3文件。一个放不下。
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 渲染子程序,将新的帧数据渲染到 lpDIBitsRender 中
' 算法:
' posx = Wave1(x-1,y)-Wave1(x+1,y)+x
' posy = Wave1(x,y-1)-Wave1(x,y+1)+y
' SourceBmp(x,y) = DestBmp(posx,posy)
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveRender(lpWaveObject As WAVE_OBJECT)
Dim dwPosX As Long, dwPosY As Long, dwPtrSource As Long, dwPtrDest As Long, dwFlag As Long
Dim lpWave1 As Long, LineIdx As Long, LinePtr As Long
Dim lpDIBitsSource As Long, lpDIBitsRender As Long
Dim I As Long, J As Long
dwFlag = 0
With lpWaveObject
'Debug.Print "WaveRender " & .dwFlag
If (.dwFlag And F_WO_ACTIVE) = 0 Then Exit Sub
.dwFlag = .dwFlag Or F_WO_NEED_UPDATE
lpWave1 = .lpWave1
LineIdx = .dwWaveByteWidth '像素指针
For I = 1 To .dwBmpHeight - 2
For J = 0 To .dwBmpWidth - 1
'********************************************************************
' PosY=i+像素上1能量-像素下1能量
' PosX=j+像素左1能量-像素右1能量
'********************************************************************
'LineIdx = LineIdx - .dwWaveByteWidth
LinePtr = lpWave1 + LineIdx - .dwWaveByteWidth
pLongPtr(0) = LinePtr
dwPosY = pLong(0)
LinePtr = lpWave1 + LineIdx + .dwWaveByteWidth
pLongPtr(0) = LinePtr
dwPosY = dwPosY - pLong(0) + I
LinePtr = lpWave1 + LineIdx - 4
pLongPtr(0) = LinePtr
dwPosX = pLong(0)
LinePtr = lpWave1 + LineIdx + 4
pLongPtr(0) = LinePtr
dwPosX = dwPosX - pLong(0) + J
If dwPosX < 0 Or dwPosY < 0 Then GoTo Continue
If dwPosX >= .dwBmpWidth Or dwPosY >= .dwBmpHeight Then GoTo Continue
'********************************************************************
' ptrSource = dwPosY * dwDIByteWidth + dwPosX * 3
' ptrDest = i * dwDIByteWidth + j * 3
'********************************************************************
'dwPtrSource = dwPosY * .dwDIByteWidth + (dwPosX + dwPosX * 2)
dwPosX = dwPosX + dwPosX * 2 'dwPosX * 3
dwPtrSource = dwPosY * .dwDIByteWidth + dwPosX
dwPtrDest = I * .dwDIByteWidth + (J + J * 2) 'dwPtrDest = I * .dwDIByteWidth + J * 3
'********************************************************************
' 渲染像素 [ptrDest] = 原始像素 [ptrSource]
'********************************************************************
lpDIBitsSource = .lpDIBitsSource + dwPtrSource
lpDIBitsRender = .lpDIBitsRender + dwPtrDest
If dwPtrSource <> dwPtrDest Then
dwFlag = dwFlag Or 1 '如果存在源像素和目标像素不同,则表示还在活动状态
' Debug.Print dwPtrSource & " SR " & dwPtrDest
'CopyMemory ByVal lpDIBitsRender, ByVal lpDIBitsSource, 3
Call WaveGetPixel(lpDIBitsSource, lpDIBitsRender, .dwDIByteWidth)
Else
CopyMemory ByVal lpDIBitsRender, ByVal lpDIBitsSource, 3
End If
'********************************************************************
' 继续循环
'********************************************************************
Continue:
LineIdx = LineIdx + 4 '像素++ '指针4个字节
Next 'J
Next 'I
SetDIBits .hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
If dwFlag = 0 Then .dwFlag = .dwFlag And (Not F_WO_ACTIVE)
'Debug.Print "WaveRender " & .dwFlag
End With
End Sub
Public Sub WaveUpdateFrame(lpWaveObject As WAVE_OBJECT, ByVal hdc As Long, bIfForce As Boolean)
'Dim ret As Long
With lpWaveObject
If bIfForce = True Then GoTo labUpdate
If (.dwFlag And F_WO_NEED_UPDATE) Then
'ret = SetDIBitsToDevice(.hDcRender, 0, 0, .dwBmpWidth, .dwBmpHeight, 0, 0, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS)
'ret = SetDIBits(.hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS)
'SetDIBits .hDcRender, .hBmpRender, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
labUpdate:
BitBlt hdc, 0, 0, .dwBmpWidth, .dwBmpHeight, .hDcRender, 0, 0, SRCCOPY
.dwFlag = .dwFlag And (Not F_WO_NEED_UPDATE)
End If
End With
End Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 扔一块石头
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveDropStone(lpWaveObject As WAVE_OBJECT, ByVal dwPosX As Long, ByVal dwPosY As Long, ByVal dwStoneSize As Long, ByVal dwStoneWeight As Long)
Dim dwSize As Long
Dim dwX1 As Long, dwX2 As Long
Dim dwY1 As Long, dwY2 As Long, dwY3 As Long
'Dim dwMaxX As Long, dwMaxY As Long
Dim LinePtr As Long
With lpWaveObject
'Debug.Print "WaveDropStone " & .dwFlag
'********************************************************************
' 计算范围
'********************************************************************
dwSize = dwStoneSize \ &H2 '2 ^ 1
dwX1 = dwPosX + dwSize
dwX2 = dwPosX - dwSize
If (.dwFlag And F_WO_ELLIPSE) Then dwSize = dwSize \ &H2 ' 2 ^ 1
dwY1 = dwPosY + dwSize
dwY2 = dwPosY - dwSize
dwSize = dwStoneSize
If dwSize = 0 Then dwSize = dwSize + 1
'********************************************************************
' 判断范围的合法性
'********************************************************************
If dwX1 + 1 >= .dwBmpWidth Or dwX2 < 1 Or dwY1 + 1 >= .dwBmpHeight Or dwY2 < 1 Then Exit Sub
'********************************************************************
' 将范围内的点的能量置为 dwStoneWeight
'********************************************************************
While dwX2 <= dwX1
dwY3 = dwY2
While dwY3 <= dwY1
'(x-x0)^2+(y-y0)^2<=r^2 就在圆内
If (dwX2 - dwPosX) * (dwX2 - dwPosX) + (dwY3 - dwPosY) * (dwY3 - dwPosY) <= dwSize * dwSize Then
LinePtr = .lpWave1 + (dwY3 * .dwBmpWidth + dwX2) * &H4 '2 ^ 2
pLongPtr(0) = LinePtr
pLong(0) = dwStoneWeight
End If
dwY3 = dwY3 + 1
Wend
dwX2 = dwX2 + 1
Wend
.dwFlag = .dwFlag Or F_WO_ACTIVE
End With
End Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 计算扩散数据、渲染位图、更新窗口、处理特效的定时器过程
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveTimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
Dim hdc As Long
Dim dwPosX As Long, dwPosY As Long, dwSize As Long, dwWeight As Long
Dim lpWaveObj As Long
'建立模拟指针
Dim pWAVE_OBJECT() As WAVE_OBJECT
Dim pWAVE_OBJECTPtr() As Long
Dim SApWAVE_OBJECT As SAFEARRAY1D
Dim SApWAVE_OBJECTPtr As SAFEARRAY1D
With SApWAVE_OBJECT
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
With SApWAVE_OBJECTPtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApWAVE_OBJECT.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pWAVE_OBJECT), VarPtr(SApWAVE_OBJECT), 4
CopyMemory ByVal VarPtrArray(pWAVE_OBJECTPtr), VarPtr(SApWAVE_OBJECTPtr), 4
lpWaveObj = idEvent
pWAVE_OBJECTPtr(0) = lpWaveObj
'Debug.Print "WaveTimerProc " & pWAVE_OBJECT(0).dwFlag
Call WaveSpread(pWAVE_OBJECT(0))
Call WaveRender(pWAVE_OBJECT(0))
With pWAVE_OBJECT(0)
If (.dwFlag And F_WO_NEED_UPDATE) Then
hdc = GetDC(.hWnd)
Call WaveUpdateFrame(pWAVE_OBJECT(0), hdc, False)
Call ReleaseDC(.hWnd, hdc)
End If
'********************************************************************
' 特效处理
'********************************************************************
If (.dwFlag And F_WO_EFFECT) = 0 Then Exit Sub
Select Case .dwEffectType
'********************************************************************
' Type = 1 雨点,Param1=速度(0最快,越大越慢),Param2=雨点大小,Param3=能量
'********************************************************************
Case 1
'Dim ret As Long
If .dwEffectParam1 > 0 Then Call WaveRandom(pWAVE_OBJECT(0), .dwEffectParam1) 'ret = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam1)
'If ret = 0 Then
dwPosX = WaveRandom(pWAVE_OBJECT(0), .dwBmpWidth - 2) + 1
dwPosY = WaveRandom(pWAVE_OBJECT(0), .dwBmpHeight - 2) + 1
dwSize = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam2) + 1
dwWeight = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam3) + 50
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, dwSize, dwWeight)
'End If
'********************************************************************
' Type = 2 行船,Param1=速度(0最快,越大越快),Param2=大小,Param3=能量
'********************************************************************
Case 2
.dwEff2Flip = .dwEff2Flip + 1
If (.dwEff2Flip And 1) <> 0 Then Exit Sub
dwPosX = .dwEff2X + .dwEff2XAdd
dwPosY = .dwEff2Y + .dwEff2YAdd
If dwPosX < 1 Then
dwPosX = -(dwPosX - 1)
.dwEff2XAdd = -.dwEff2XAdd
End If
If dwPosY < 1 Then
dwPosY = -(dwPosY - 1)
.dwEff2YAdd = -.dwEff2YAdd
End If
If dwPosX > .dwBmpWidth - 1 Then
dwPosX = (.dwBmpWidth - 1) - (dwPosX - (.dwBmpWidth - 1)) '(.dwBmpWidth - 1)*2 -dwPosX
.dwEff2XAdd = -.dwEff2XAdd
End If
If dwPosY > .dwBmpHeight - 1 Then
dwPosY = (.dwBmpHeight - 1) - (dwPosY - (.dwBmpHeight - 1)) '(.dwBmpHeight-1)*2-dwPosY
.dwEff2YAdd = -.dwEff2YAdd
End If
.dwEff2X = dwPosX
.dwEff2Y = dwPosY
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, .dwEffectParam2, .dwEffectParam3)
'********************************************************************
' Type = 3 波浪,Param1=密度,Param2=大小,Param3=能量
'********************************************************************
Case 3
Dim I As Long
For I = 0 To .dwEffectParam1
dwPosX = WaveRandom(pWAVE_OBJECT(0), .dwBmpWidth - 2) + 1
dwPosY = WaveRandom(pWAVE_OBJECT(0), .dwBmpHeight - 2) + 1
dwSize = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam2) + 1
dwWeight = WaveRandom(pWAVE_OBJECT(0), .dwEffectParam3)
Call WaveDropStone(pWAVE_OBJECT(0), dwPosX, dwPosY, dwSize, dwWeight)
Next
End Select
End With
'取消模拟指针
CopyMemory ByVal VarPtrArray(pWAVE_OBJECT), 0&, 4
CopyMemory ByVal VarPtrArray(pWAVE_OBJECTPtr), 0&, 4
End Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'释放对象
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveFree(lpWaveObject As WAVE_OBJECT)
With lpWaveObject
If .hDcRender > 0 Then DeleteDC (.hDcRender)
If .hBmpRender > 0 Then DeleteObject .hBmpRender
If .lpDIBitsSource > 0 Then GlobalFree .lpDIBitsSource
If .lpDIBitsRender > 0 Then GlobalFree .lpDIBitsRender
If .lpWave1 > 0 Then GlobalFree .lpWave1
If .lpWave2 > 0 Then GlobalFree .lpWave2
KillTimer .hWnd, VarPtr(lpWaveObject)
ZeroMemory ByVal VarPtr(lpWaveObject), Len(lpWaveObject)
'-----------------------------------------------------------
'取消模拟指针
CopyMemory ByVal VarPtrArray(pLong), 0&, 4
CopyMemory ByVal VarPtrArray(pLongPtr), 0&, 4
'-----------------------------------------------------------------
'取消模拟指针
CopyMemory ByVal VarPtrArray(pByte), 0&, 4
CopyMemory ByVal VarPtrArray(pBytePtr), 0&, 4
'-----------------------------------------------------------
End With
End Sub
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 初始化对象
' 参数:_lpWaveObject = 指向 WAVE_OBJECT结构体
' 返回:0 成功、 1 失败
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Function WaveInit(lpWaveObject As WAVE_OBJECT, ByVal hWnd As Long, ByVal hBmp As Long, ByVal dwSpeed As Long, ByVal dwType As WaveType) As Long
Dim stBmp As BITMAP
Dim dwReturn As Long
Dim ret As Long
Dim hdc As Long
Dim hMDC As Long
'-----------------------------------------------------------------
'建立模拟指针
With SApLong
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
With SApLongPtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApLong.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pLong), VarPtr(SApLong), 4
CopyMemory ByVal VarPtrArray(pLongPtr), VarPtr(SApLongPtr), 4
'-----------------------------------------------------------------
'建立模拟指针
With SApByte
.cDims = 1
.fFeatures = 0
.cbElements = 1
.cLocks = 0
.pvData = 0
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 3
End With
With SApBytePtr
.cDims = 1
.fFeatures = 0
.cbElements = 4
.cLocks = 0
.pvData = VarPtr(SApByte.pvData)
.Bounds(0).lLbound = 0
.Bounds(0).cElements = 1
End With
CopyMemory ByVal VarPtrArray(pByte), VarPtr(SApByte), 4
CopyMemory ByVal VarPtrArray(pBytePtr), VarPtr(SApBytePtr), 4
'-----------------------------------------------------------------
dwReturn = 0
ZeroMemory ByVal VarPtr(lpWaveObject), Len(lpWaveObject)
'ZeroMemory lpWaveObject, &H84 ' Len(WAVE_OBJECT)
With lpWaveObject
If dwType = sEllipse Then
.dwFlag = .dwFlag Or F_WO_ELLIPSE
End If
'********************************************************************
' 获取位图尺寸
'********************************************************************
.hWnd = hWnd
.dwRandom = GetTickCount()
ret = GetObject(hBmp, Len(stBmp), stBmp)
If ret = 0 Then
dwReturn = 1
GoTo result
End If
.dwBmpHeight = stBmp.bmHeight
'if lpWaveObject.dwBmpHeight < 3 then dwReturn = 1:GoTo result
.dwBmpWidth = stBmp.bmWidth
'if lpWaveObject.dwBmpWidth < 3 then dwReturn = 1:GoTo result
.dwWaveByteWidth = stBmp.bmWidth * &H4 '2 ^ 2 'dwBmpWidth * 4
.dwDIByteWidth = (stBmp.bmWidth + stBmp.bmWidth * 2 + 3) And (Not &H3&) '(dwBmpWidth * 3 + 3) and ~3 ' ((W * 3& + 3&) And (Not 3&))
'********************************************************************
' 创建用于渲染的位图
'********************************************************************
hdc = GetDC(hWnd)
.hDcRender = CreateCompatibleDC(hdc)
.hBmpRender = CreateCompatibleBitmap(hdc, .dwBmpWidth, .dwBmpHeight)
'MsgBox .hBmpRender
SelectObject .hDcRender, .hBmpRender
'********************************************************************
' 分配波能缓冲区
'********************************************************************
.lpWave1 = GlobalAlloc(GPTR, .dwWaveByteWidth * .dwBmpHeight)
.lpWave2 = GlobalAlloc(GPTR, .dwWaveByteWidth * .dwBmpHeight)
'********************************************************************
' 分配像素缓冲区
'********************************************************************
.lpDIBitsSource = GlobalAlloc(GPTR, .dwDIByteWidth * .dwBmpHeight)
.lpDIBitsRender = GlobalAlloc(GPTR, .dwDIByteWidth * .dwBmpHeight)
'********************************************************************
' 获取原始像素数据
'********************************************************************
'With .stBmpInfo.bmiHeader
.stBmpInfo.bmiHeader.biSize = Len(.stBmpInfo.bmiHeader) ' &H28 'len(BITMAPINFOHEADER)
.stBmpInfo.bmiHeader.biWidth = .dwBmpWidth
.stBmpInfo.bmiHeader.biHeight = -.dwBmpHeight '- .dwBmpHeight
.stBmpInfo.bmiHeader.biPlanes = 1
.stBmpInfo.bmiHeader.biBitCount = 24
.stBmpInfo.bmiHeader.biCompression = BI_RGB
.stBmpInfo.bmiHeader.biSizeImage = 0
'End With
hMDC = CreateCompatibleDC(hdc)
SelectObject hMDC, hBmp
ReleaseDC hWnd, hdc
GetDIBits hMDC, hBmp, 0, .dwBmpHeight, .lpDIBitsSource, .stBmpInfo, DIB_RGB_COLORS
GetDIBits hMDC, hBmp, 0, .dwBmpHeight, .lpDIBitsRender, .stBmpInfo, DIB_RGB_COLORS
DeleteDC hMDC
If .lpWave1 = 0 Or .lpWave2 = 0 Or .lpDIBitsSource = 0 Or .lpDIBitsRender = 0 Or .hDcRender = 0 Then
WaveFree lpWaveObject
dwReturn = 1
End If
'Debug.Print "WaveInit " & .dwFlag
SetTimer hWnd, ByVal VarPtr(lpWaveObject), dwSpeed, AddressOf WaveTimerProc
.dwFlag = .dwFlag Or F_WO_ACTIVE Or F_WO_NEED_UPDATE
'Debug.Print "WaveInit " & .dwFlag
WaveRender lpWaveObject
hdc = GetDC(.hWnd)
WaveUpdateFrame lpWaveObject, hdc, True
ReleaseDC .hWnd, hdc
End With
'********************************************************************
result:
WaveInit = dwReturn
End Function
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
' 一些特效
' 输入:dwType = 0 关闭特效
' dwType <> 0 开启特效,参数具体见上面
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Public Sub WaveEffect(lpWaveObject As WAVE_OBJECT, ByVal dwEffectType As WaveEffectType, ByVal dwParam1 As Long, ByVal dwParam2 As Long, ByVal dwParam3 As Long)
Dim dwMaxX As Long, dwMaxY As Long
With lpWaveObject
' Debug.Print "WaveEffect " & .dwFlag
Select Case dwEffectType
Case wClose '关闭特效
.dwFlag = .dwFlag And (Not F_WO_EFFECT)
.dwEffectType = dwEffectType
Exit Sub
'Case wrain '下雨
Case wLaunch '汽艇
.dwEff2XAdd = dwParam1
.dwEff2YAdd = dwParam1
.dwEff2X = WaveRandom(lpWaveObject, .dwBmpWidth - 2) + 1
.dwEff2Y = WaveRandom(lpWaveObject, .dwBmpHeight - 2) + 1
' .dwEffectType = dwEffectType
' .dwEffectParam1 = dwParam1
' .dwEffectParam2 = dwParam2
' .dwEffectParam3 = dwParam3
' .dwFlag = .dwFlag Or F_WO_EFFECT
'Case wWaves '风浪
'Case Else '默认
End Select
.dwEffectType = dwEffectType
.dwEffectParam1 = dwParam1
.dwEffectParam2 = dwParam2
.dwEffectParam3 = dwParam3
.dwFlag = .dwFlag Or F_WO_EFFECT
End With
End Sub
完
2. 电脑玩大型单机游戏出水波纹是显卡的问题还是求高手
1显卡驱动,首先确定的是你电源没问题,900W 不是电压问题。然后付现率100%不是电磁干扰的问题。显示器别的游戏没问题不是硬件问题。
然后现在就是显卡和显示器的传输线问题了。线不好可能会有波温。
然后就是显卡驱动,这个很重要。如果驱动不对,跟不上游戏的引擎算法,会出现问题,你高配置后的效果算法和低配置不一样的。所以换更新驱动看看如果还不行,那就不要玩有问题的游戏了。。。如果很多游戏都这样 找电脑店检查时最好的解决办法。
3. 液晶显示器玩游戏有水波纹
液晶显示器和传统的CRT显示器,分辨率都是重要的参数之一。传统CRT显示器所支持的分辨率较有弹性,而液晶的像素间距已经固定,所以支持的显示模式不像CRT那么多。液晶的最佳分辨率,也叫最大分辨率,在该分辨率下,液晶显示器才能显现最佳影像。
目前15英寸液晶的最佳分辨率为1024×768,17~19英寸的最佳分辨率通常为1280×1024,更大尺寸拥有更大的最佳分辨率。
液晶显示器呈现分辨率较低的显示模式时,有两种方式进行显示。第一种为居中显示:例如在XGA 1024×768的屏幕上显示SVGA 800×600的画面时,只有屏幕居中的800×600个像素被呈现出来,其它没有被呈现出来的像素则维持黑暗。目前该方法较少采用。另一种称为扩展显示:在显示低于最佳分辨率的画面时,各像素点通过差动算法扩充到相邻像素点显示,从而使整个画面被充满。这样也使画面失去原来的清晰度和真实的色彩。
4. ubuntu登陆不了图形界面 为什么
去这里问吧 http://forum.ubuntu.org.cn
http://forum.ubuntu.org.cn/viewtopic.php?t=55026
我最近刚装的7.10 支持我的ATI X1450
首先知道安装驱动出问题后无办法进入图形界面X后,如何再进入X
进入不了X的话,在启动菜单的时候选择第二行的命令模式,
首先是LOGIN 就是输入你的用户名然后再输入密码。
然后再输入
sudo dpkg--reconfigure xserver-xorg
在弹出窗口选择默认的显卡V...确定就可以,其它的不停确定,有些需要用方向键,再确定。
然后输入statx
这样又见到桌面,然后再重启吧,恢复正常!!!
先下载ATI的驱动
8.40.4只支持9500及以上显卡,老显卡不支持(32/64位通吃)
下载
8.41驱动主要要支持HD系列,就是2XXX系列的显卡,请非HD系用户不要更新!
下载
选择合适的驱动
下载到桌面,然后把它改名,把-X86.X86_64去掉。如原来是ati-driver-installer-8.41.7-x86.x86_64.run的改为ati-driver-installer-8.40.4.run
安装编译所必须的工具 代码:
sudo apt-get update
sudo apt-get install mole-assistant build-essential fakeroot dh-make debhelper debconf libstdc++5 linux-headers-$(uname -r)
创建deb包
注意:执行下面的命令的前提是,你必须在终端下用cd命令到你下载的驱动的当前目录。
比如我的驱动是下载在桌面的, 我就用右键选择驱动文件的属性,看它的位置,然后复制它的位置。
位置是:/home/zero/Desktop
zero是我的用户名,如果你的是ABC,而且你都是放在桌面上的话,那么你的位置是/hom/ABC/Desktop
然后在终端输入: cd /home/zero/Desktop
你就可以根据你的实际情况输入:cd ...........
如果是6.10 Edgy: 代码:
sh *.run --buildpkg Ubuntu/edgy
Ubuntu7.10或是7.04Feisty: 代码:
sh *.run --buildpkg Ubuntu/feisty
等待桌面生成4个DEB包,先不要管他们。
屏蔽fglrx核心模块
代码:
sudo gedit /etc/default/linux-restricted-moles-common
将 代码:
DISABLED_MODULES=""
改成 代码:
DISABLED_MODULES="fglrx"
安装deb包 代码:
sudo dpkg -i xorg-driver-fglrx_*.deb fglrx-kernel-source*.deb fglrx-amdcccle*.deb
移除旧的fglrx
如果你是第一次做,那么会提示你这个文件找不到。别管他,继续往下做就是。 代码:
sudo rm /usr/src/fglrx-kernel*.deb
sudo apt-get -f install
编译内核模块并安装 代码:
sudo mole-assistant prepare
sudo mole-assistant update
sudo mole-assistant build fglrx
cd /usr/src
sudo dpkg -i fglrx-kernel-*
sudo depmod -a
防止有些DEB包没装好,你可以打开桌面的包,尝试安装,证全部到安装好。
重启电脑!!
重启后,配置驱动
注意,如果以前装过fglrx驱动,此步无须再做。 代码:
sudo dpkg-reconfigure xserver-xorg
在选择驱动时,选择fglrx。
然后
sudo gedit /etc/X11/xorg.conf
在/etc/X11/xorg.conf的Device段添加两行: 代码:
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
并且 在末尾
添加两段 代码:
Section "Extensions"
Option "Composite" "0"
EndSection
Section "ServerFlags"
Option "AIGLX" "off"
EndSection
上面这两段很重要!(在7.04中,如果你用了sudo dpkg-reconfigure来配置的话,第一段应该已经有了)
再输入
sudo mkdir -p /usr/X11R6/lib/moles/dri
sudo ln -s /usr/lib/dri/fglrx_dri.so /usr/X11R6/lib/moles/dri
重启系统
确认驱动是否正确安装 代码:
$ fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: Radeon X1650 Series
OpenGL version string: 2.0.6747 (8.40.4)
如果显示的是
代码:
fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
version string: 1.2 (1.5 Mesa 6.4.1)
请彻底卸载驱动
代码:
sudo apt-get remove --purge fglrx-control
sudo apt-get remove --purge fglrx-kernel-source
sudo apt-get remove --purge xorg-driver-fglrx
代码:
sudo lrm-manager
并把原来装过的4个包彻底删除。
代码:
sudo apt-get autoremove --purge fglrx*
再重新按上面的方法安装。
代码:
$ glxinfo | grep render
direct rendering: Yes #如果开启了xgl,那么这里一定是No,还有其他一些信息。
二,安装XGL
1,下载安装相关组件
代码:
sudo apt-get install xserver-xgl
2,配置XGL
代码:
gksudo gedit /usr/local/bin/startxgl.sh
输入如下内容
代码:
#!/bin/sh
Xgl :1 -fullscreen -ac -accel xv:pbuffer -accel glx:pbuffer &
DISPLAY=:1
cookie="$(xauth -i nextract - :0 | cut -d ' ' -f 9)"
xauth -i add :1 . "$cookie"
exec dbus-launch --exit-with-session gnome-session
代码:
sudo chmod a+x /usr/local/bin/startxgl.sh
代码:
gksudo gedit /usr/share/xsessions/xgl.desktop
输入如下内容
代码:
[Desktop Entry]
Encoding=UTF-8
Name=Xgl
Comment=Start an Xgl Session
Exec=/usr/local/bin/startxgl.sh
Icon=
Type=Application
至此,XGL安装完毕,重启系统,登陆时选择XGL会话;暂时不要将此会话设为默认,万一有问题还可以回到gnome,等XGL稳定了再设成默认。
安装Compiz及Compiz fusion
代码:
sudo apt-get install compiz compiz-gnome
sudo apt-get install compizconfig-settings-manager
sudo apt-get install compiz-fusion-*
一定记得重启后选择会话成XGL
登陆时选择XGL会话,进入系统后COMPIZ默认就启动了!
) Compiz Manager
这个是管理器,开机自启动(就是那个面板上的红色立方体)。用来调用CGWD Themer和Compiz Settings Manger,以及可以随时切换XGL/compiz和Gnome桌面环境。如果XGL出现问题,可以reload一下。
3) Compiz Settings Manager
这个就是前面安装的csm,用来设置XGL/compiz的各项插件。
找到并打开 系统-首选项-Compiz Settings Manager,这里可以对插件的各部分进行设置。点击每个选项边上的 i 图标可以查看该选项的内容和设置方式,还有一个像扫把一样的图标是恢复默认设置,如果你设置的不满意可以reset。另外,可能系统没有映射super 键,那就需要将win键映射为super键。找到系统-首选项-键盘-布局选项 的 alt/win键行为,选中 super被映射到Windows键。
先简要说一下各插件的作用:(已更新)
Animation Effects
使得窗口的打开、关闭、聚焦等产生诸如神灯、梦幻、旋转、波浪、缩放等动画效果。
Benchmark:测试compiz下的3D加速情况。调用方法:super+F12。
Blur:使窗口边框产生磨砂玻璃的模糊特效,默认开启且质量为fast。
Brightness and Saturation:设置窗口的亮度和色彩饱和度,默认启用。调用方法:按住ctrl并滚动鼠标滚轮调节色彩饱和度,按住shift并滚动鼠标滚轮调节亮度。
Crash handler:XGL/compiz崩溃时可以自动重启XGL。
Desktop Cube:设置3D立方体的背景、顶部和底部,速度等,默认开启。
Window Decoration:窗口的边框,配合透明度、饱和度和亮度,默认开启。
Fading Windows:给窗口和其他 GUI 部件提供淡入淡出效果,默认开启。
Minimize Effect:对窗口最大化/最小化过程进行渲染,默认开启。
Move Window:移动窗口,可以调整移动时的透明度,默认开启。调用方法:按住alt和鼠标左键,出现一个十字架,或者用组合键alt+F7。
Negtive:使整个桌面或者当前窗口反色。调用方法:super+m,super+n。
Place Windows:打开窗口时放到合适位置,默认开启。
Dektop Plane
将所有窗口放在一个平面上。不是很好看。
Put:将窗口放到当前工作区的上左、上中、上右、左、正中、右、左下、下中和右下,以及放到其他工作区。自己可以定义组合键。
Implements reflections on decorations:将一张png格式的图片作为窗口边框的背景。不建议开启,与blur插件有点小冲突,特别是你有上面板的话。
Resize Window:改变窗口的大小,默认开启。调用方法:alt+鼠标中键(即按下滚轮)或者alt+F8。
Rotate Cube:旋转3D桌面。
Scale:像mac一样的平铺窗口,默认开启。调用方法:鼠标移到屏幕四角(严格讲,右下角不是该插件的作用,而是Shows the desktop插件的)或者按F8,F10,F11,F12。
Screenshot:抓鼠标选定的区域的图。调用方法:super+鼠标左键(按住并选定一块区域)。
Shows the desktop:显示桌面,其实是将窗口向屏幕的上下或者其他方向移动,默认开启。调用方法:按F7,或者鼠标移到屏幕右下角。
Set Window Attribs by various criteria:单独设置某些桌面元素如窗口、菜单、面板等的属性(如透明度、色彩饱和度、亮度等)。
Application Switcher:切换窗口实现胶片预览效果。除了当前窗口其他都半透明。默认开启。调用方法:alt+tab等,可自定义。
Window focus leaves a trial:依照窗口未被使用的时间改变亮度、色彩饱和度和不透明度。默认开启。
Water Effect:使屏幕产生雨点效果,水波纹效果以及窗口标题栏的水波效果。调用方法:shift+F9,shift+F8,可自定义。
Wobbly Windows:使窗口等产生凝胶效果(象橡皮糖一样),默认开启。
Zoom Desktop:放大屏幕,默认开启。调用方法:super+鼠标滚轮或super+鼠标右键。
下面说一下各插件的设置。一般情况下,默认设置就可以了,有些插件如果有特殊要求可以自己修改参数。
先把几个通用的选项说一下。
Keyboard:键盘组合键的设置,一般是ctrl, alt, super(win), shift+其他键。可以自定义。
Mouse:鼠标和键盘的组合键。button number就是鼠标上的按键。常用的有 1: 鼠标左键,2:鼠标中键(即按下滚轮),3:鼠标右键,4:滚轮向上,5:滚轮向下。
Screen Edges:鼠标移动到屏幕的某个角落并执行特定操作。
如果有可以更换或添加图片或者图标的框,一定要把图片转换成png格式,并完整填入图片所在地址。
General Options
一般设置。Choices中除了TextFilter可以改成best以使窗口锯齿更平滑外,其他保持默认即可。Commands中可自定义用组合键打开的程序或者命令,和Keyboard联合使用。
比如,你在Commands的Command line 0中填入 gnome-system-monitor,然后在Keyboard找到Run Command 0,把Control、Alt 钩上,并在Key Name中填入Delete;你就可以用ctrl+alt+delete组合来打开系统监视器了。
Animation Effects
可自己选择各种效果以及持续时间、波的宽度、波的幅度。grid resolution 越高,分辨率越大,资源占用越多。该插件调用时比较耗资源。
Benchmark
保持默认即可。
Blur
模糊质量可调成fast, best和nonfragment。nonfragment可以自己调节模糊程度,与Numeric Values配合使用。建议只用fast,其他的并不是很好。感觉这个插件非常耗资源,而且是一直都在消耗。关闭后benchmark可以增加100多,而且效果还不如换一个不是非常透明的边框主题来的好,有不少缺陷。大可把他关闭。
Brightness and Saturation
保持默认。可以更改调节亮度和饱和度的步长。
Crash handler
保持默认。
Desktop Cube
可以钩上Scale image on top、Skydome、Animate Skydome、Scale image on bottom使立方体更漂亮。顶部、底部的图片可以更换。
Window Decoration
保持默认。
Fading Windows
保持默认。可以把Visual Bell 和 Urgent钩上,在某些情况下如系统出问题,msn对话中会使屏幕反复变暗。可在Urgent Count修改变暗的次数。
Minimize Effect
可以把Window Types中的Unknown 钩上,使右键菜单和应用程序菜单有淡入淡出效果。
Move Window
保持默认。
Negtive
保持默认。
Place Windows
保持默认。
Desktop Plane
类似rotate cube的一个插件,不过似乎效果很差,不建议使用。(跟rotate也有一点冲突)
Put
可以自己照着例子修改一下组合键。
Implements reflections on decorations
填入一个png图片的地址即可。不建议使用。
Resize Window
保持默认即可。可以更改resize的模式,有normal、stretch、outline、filled outline。透明度也可以改,我是把两个都设成75。
Rotate Cube
保持默认即可。可自定义选装的组合键。
Scale
保持默认。可更改平铺的算法,normal, enhanced, organic。建议将Initiate Window Picker for Current App键的F11改成F6,以免和全屏快捷键冲突。
Screenshot
保持默认。可以修改图片的保存目录。
Shows the desktop
保持默认。可以修改窗口的隐藏方向,在window direction。0是上,1是下,2是左,3是右,4是上下,5是左右。
Set Window Attribs by various criteria
我只会调节透明度、饱和度和亮度。知道其他设置的朋友可否教我一下 Very Happy 。格式是
代码:
w:窗口类型名:整数
比如:
代码:
w:Dock:60
w:Unknown:75
w:Splash:75
等等。
Application Switcher
一般保持默认。如果觉得组合键不方便,可以自己改。建议钩上 Auto Rotate和Temp UnMinimize。
Window focus leaves a trial
可以根据需要调节最低透明度、饱和度、亮度。
Water Effect
可以把Title wave on System Bell钩上,最典型的效果就是在终端按Backspace,就会在标题栏显示水波纹。另外,可以把initiate 里面的键设成super+w,按住可以看到鼠标周围有水波纹。该插件被调用时非常耗资源。
Wobbly Windows
该插件比较耗资源。如果有人不喜欢,可以不用把这个插件钩上。可以修改各种你喜欢的窗口类型,使其拥有凝胶效果,一般默认的即可。不过有些朋友讨厌菜单也这样的,可以把Map Window Types里的Unknown去掉前面的钩。可以任意修改各种窗口的弹度系数(Spring K)和摩擦系数(Friction)。另外可以把Grid Resolution(栅格分辨率)调到60,我调到60以上会有部分窗口出现褶皱;Minimun Grid Size可以调到4(越小越精细)。还可以把Keyboard中的Shiver(颤动)设成super+s,按住这两个键,当前窗口会颤动(非常耗资源)。
Zoom Desktop
建议把Filter Linear 钩上,可使放大时比较平滑。其他保持默认。该插件调用时比较耗资源。
5. 千元级手机新标杆 Redmi Note 9 4G极致性价比手机评测
Redmi自从接过小米“极致性价比”的大旗之后,每一款产品都深受广大消费者认可,小米Note 8系列自问世以来,累计销量超过3000万台,这样的恐怖的数字足以说明,消费者对于这个系列产品的肯定。
现在,全新的升级版Redmi Note 9系列产品来袭,这个系列的产品一共有3款,他们分辨是Redmi Note 9 4G、Redmi Note 9 5G、Redmi Note 9Pro 5G,下面我就来和大家一起来体验一下其中性价比最为突出的一款手机。
总结:Redmi Note 9 4G手机拥有极其出色的续航表现,6000mAh的超大电池容量,完全能够满足两三天一冲的需求,应对目前耗电量巨大的短视频应用,能够做到非常出色的日常使用体验,同时护眼屏幕显示效果细腻,并且128G起步的超大存储空间,很好的满足了绝大部分人们的使用要求,综合来看,这款手机绝对是千元左右的新标杆。
6. 闪付pass是什么意思
闪付表示银联非接触式支付产品,用具备“闪付”功能的金融IC卡或银联移动支付产品,在支持银联“闪付”的非接触式支付终端上,轻松一挥便可快速完成支付。
闪付是金融IC卡的一种快捷交易方式,基于安全芯片及非接触式支付技术。具有闪付功能的金融IC卡的卡面有中文“闪付”和英文“QuickPass”字样或水波纹图样。 当持卡人使用具有闪付功能的金融IC卡或支持闪付的移动设备,在境内指定商户进行1000元及以下的交易时,只需将卡片或移动设备靠近POS机的“闪付”感应区,即可完成支付。支付过程中,持卡人不会被要求输入密码,也无需签名,这称之为小额免密免签服务
拓展资料
”闪付“功能的安全性
1.2019年4月,中国银联联合商业银行共同开展新一轮告知服务,提供小额双免一键开关功能。
2.提供“风险全额赔付”服务 为减少持卡人用卡安全顾虑,中国银联联合各商业银行为持卡人设置了专项补偿金,提供小额双免“风险全额赔付”服务,对于正常用卡客户发生的双免盗用损失,经核实都可得到全额赔付。
3.中国银联还将联合商业银行建立线上快速理赔通道,在云闪付APP安全中心上线快速赔付受理功能,进一步提升持卡人赔付体验。
手机模拟成了“银行卡”,用这张“银行卡”贴近破司机、输入密码,完成交易。 手机就是“银行卡”,是因为手机里有和银行卡类似的芯片,可以理解为NFC,在开通各种Pay时会向银行申请一个虚拟卡号,这个虚拟卡号会写到手机里的NFC芯片内,此时这个芯片就模拟成了一张银行卡,只是这个卡是虚拟看不见的,银行里对这个卡是有记录的,所以才能支付。 NFC可以存储多个虚拟卡号,所以可以绑定多个银行卡。当然不同手机由于芯片算法的限制,能绑定的银行卡数量也有限制。
7. 铲屎官的福音,石头T7S扫拖一体机测评
熟悉我的朋友都知道,我是个坚定的米家一代扫地机器人钉子户,这些年已经陆陆续续买了三台给自己和两边家长家里使用了。为啥一直不升级,一个是近些年的扫拖一体机的拖地功能基本是白给,一个就是性价比高。
自家的米家一代三年用下来,最近老是碰撞传感器报错,感觉是寿命快到了。老伙计这么久用下来,大体上还是很满意的,就是几个问题还是要和大家分享下。第一个就是主刷缠绕各种毛发的问题,家里领导头发多,经常掉头发,加上养了3个扁扁的加菲,最近是隔三差五就提示我清理主刷;第二点是避障一般,主卧里铺了一块地毯,隔三差五把地毯角落给吸进去,就卡住了;最后就是尘盒略小,各位铲屎官一定都知道主子们是最喜欢把毛发和猫砂带着到处跑的,一般清扫两次集尘盒就是满满一堆垃圾。
出于对米家一代的认可,选购新的扫地机器人的时候,肯定是优先考虑石头的产品了。目前石头主推的是最新款的T7S和T7S Plus,主要区别是Plus版本多了一个AI结构光避障,其他和T7S一样。T7S和上一代T7除了日常升级算法外,最大的升级主要有三点。第一个就是那个特别容易铲头发的主刷改成了不容易缠绕毛发的TPU柔性胶刷;第二个是在拖地功能上升级了横向震动拖布,拖地功能更进一步;以及我认为最重要的升级,支持后期选购集尘盒模块。
具体的对比可以看上面的表格,300元的差价让我放弃了T7S Plus,留点钱买1500的集尘模块更香。产品是618期间买的,收到使用小一个月了,和各位值友分享下自己的使用体会。
T7S的包装我还是很喜欢的,在部分国产品牌包装越来越月饼化的情况下,一个简单的单层纸箱子很有环保的感觉。整个纸箱没有破损,说明纸板的用料不错。正面是T7S的产品图,反面是石头的LOGO。
打开后是上下两层结构,也是用一层纸板分割,配件比较简单,我就都放在一起了。包括T7S扫拖一体机、拖地模块、替换的尘盒滤芯、充电底座、电源线和一本说明书。
一个个来看,首先是机器人本身。还是家族设计,白色搭配银色按钮,正面的LDS传感器周围有一圈水波纹纹理。橙色的按钮是水箱的开关。
按键还是局部清扫、清扫/开机键、回充键的三键设计。同时在局部清扫按键中新增了童锁功能,长按3s即可开启,对于有熊孩子和宠物的家庭很友好,不用担心手机APP忽然收到启动提示。
机身的正面是碰撞缓冲传感器,能过轻触来识别判定障碍物。如果花300块升级到T7S Plus,会有AI结构光避障功能,能够自动识别障碍物,做到不触碰。侧面两颗是沿墙传感器,可以做到扫地机紧贴墙壁进行清扫。
T7S的尘盒还是设计在顶部,打开盖板就看到了。尘盒容量是470ml,比T7和米家一代都大。滤网放置在尘盒上方,根据重力学定律,灰尘更易掉落到尘盒, 减少滤网灰尘堆积,从而降低清理滤网的频率。
水箱是一体隐藏式设计,按下橙色按钮就能取出。水箱容量300ml,官方说是在轻柔模式下,能够清洁250 的面积,用来拖我们这种百平米狗窝是绰绰有余。出水采用了恒压电控,拖地喷洒更加精准。
机底布置变化不大,相较T7,主要是增加了一枚超声波地毯识别传感器。再识别到地毯后会在APP地图中标注,方便后续扫拖。
比较显眼的是红色TPU柔性胶刷,和之前使用的毛刷相比,不用担心缠绕,所以配件里也就没有了那把小割刀。
拖地模块采用了易安装设计,一推就进去了,拆卸的话按住两边的按钮就能拉出来,很方便。
作为T7S的重要升级,新的拖地模块能够模拟超声波高频震动,在无刷电机带动下实现3000 次/分钟的频率擦洗,对于宠物在地上的顽固污渍(粑粑除外)会有更好的清洁效果,后面会有实际效果测试。拖布和模块之前是用魔术贴固定的,拆卸方便。
拖地模块的侧边可以清楚的看到独立升降模组,能够提供5mm升降范围。当T7S识别到地毯时,会主动升起擦地模组,防止打湿地毯。
石头的充电底座最喜欢就是背后的这个线材可收纳设计了,能够根据底座和插头的距离收纳长度,不用拖着一坨电线出来。
开箱结束,通电开搞。
T7S支持石头官方APP和米家APP,连接方便。这点对于消费者来说体验还是很好的,无论是石头的铁粉还是米家生态链的用户,都能有一个集成度高、功能全的APP搞定智能家居,不用下乱七八糟一堆APP。
一众基础的功能就不演示了,什么模式选择、虚拟墙各家都有。第一次清扫完成后会自动生成地图,后面就能智能规划清扫路线了。比较实用的是T7S的地图管理里多了一个地图保存功能,还属于Bata阶段。能够对房间进行自动分区、设定名称已经保存多楼层的多张地图,复式豪宅必备。
而在完成分区设置后,我们可以根据自己的需求定制所有区域的扫拖模式,无论是单扫单拖还是扫拖一体,真正做到一家一个清扫方案。
T7S的地毯识别非常精准,家中厨房、卫生间和主卧的三块地毯一次清洁后都有被标识出来。
在设置中打开地毯增压模式,下次扫地清洁地毯的时候就会自动开启最大吸力,增加清洁能力。
在安装拖地模块后还有三种地毯清洁模式可以选择,默认自适应地毯,拖布升降模块会自动升起并停止出水,只做清扫。
得益于RR mason 8.0算法,在地图构建完成后,T7S的后续清扫会自动规划路径,更高效的清洁地面。比如我家客厅的这个茶几就是个简单的梅花桩,T7S能够很好的延边清洁,基本没啥碰撞。
石头产品的扫地功能已经是很成熟了,2500Pa大吸力和精准算法加持下,比较细碎+大颗粒的猫砂都能轻松吸干净。
清洁完成后就可以通过顶部取出尘盒倾倒垃圾,比部分底部尘盒的设计便捷很多。家里的三只猫天天到处跑,一次清洁完470ml的尘盒也是满满当当的猫毛。当然等我攒点钱可以入了自动集尘模块,期待一个月倒一次垃圾的体验。
在拖地清洁力的测试上我分别往瓷砖上挤了好几坨照烧酱、番茄酱和酱油,大热天的静止一会就有点干了。其中照烧酱应该是最难清理的,除了酱里面还有黑胡椒颗粒等等固体,非常考验扫拖机器人的拖地能力。
APP中选择精细拖地(只拖不扫),强度标准,稍稍润湿拖布后就可以开始清洁了。可看到石头T7S的声波高频震动擦地在地面留下了明显的擦痕,三个污渍都被很好的清洁干净。智能路径规划也把高速反复的擦拭清洁中带开的污渍二次清洁干净。
拖完后非常干净,相比传统扫拖一体机的压力拖布清洁力提升明显。
对于新购入的T7S,一个阶段使用体验下来还是很满意的。对于常青树米家一代扫地机器人无论是扫地功能还是拖地功能都有明显的提升。新的TPU柔性胶刷省去了我隔三差五清洁主刷毛发的烦恼;RR mason 8.0算法在路线规划和避障上表现优秀;全球首创的升降式声波震动的拖地模块,扫地机器人的拖地功能不再是鸡肋,搭配地毯升降功能,实用性也是更强。
如果和我们一样的养宠物家庭,想要选购一款扫地能力强,尘盒大,拖地功能实用的扫拖一体机,石头T7S是一个很有必要加入购物车的选择!
8. OpenGL怎么制作水波纹
要学习关于矩阵的数学知识,还有就是要找个算法!
9. 裸眼3d水波纹是系统问题还是硬件问题
企业介绍 深圳市唯创数字文化科技有限公司位于广东省深圳市。注册资金500万,是一家充满活力的富有创意的多媒体系统集成公司。唯创数字文化自成立初始便专注于多媒体系统集成方案的设计与优质投影应用的施工制作,为客户提供优质的投影服务。 公司致力于全息投影、互动应用、触控系统、多媒体系统集成、投影工程、裸眼3D投影、大屏融合、数字展厅、数字片源、软件开发制作等。唯创数字文化始终坚持Soley Creative(完全创新)的理念!公司拥有一批富有活力的团队,专业的一体化展览展示、投影应用的设计施工开发团队。专业提供展览展示、投影工程的设计、制作、安装施工的一体化服务。 唯创数字文化科技有限公司服务于全国,在企事业单位、国家机关、政府机关、科研教育机构等众多领域得到了合作伙伴的一直认可!唯创数字文化凭借出众的实力和绝对的创新,让企业展馆更加活跃,让博物馆科技馆更加有趣,让发布会主题公园、房产营销会更加绚丽多彩,让您的展览更加与众不同! 未来,唯创数字文化将以更加饱满的热情,和更加出色的服务回馈新老客户,坚持Soley Creative(完全创新)的理念,打造出更加富有新意的作品。 主营业务全息投影 全息投影技术(front-projected holographic display)也称虚拟成像技术是利用干涉和衍射原理记录并再现物体真实的三维图像的技术。全息投影技术不仅可以产生立体的空中幻像,还可以使幻像与表演者产生互动,一起完成表演,产生令人震撼的演出效果。 适用范围产品展览、汽车服装发布会、舞台节目、互动、酒吧娱乐、场所互动投影等。 幻影成像系统也称虚拟成像是基于"实景造型"和"幻影"的光学成像结合,将所拍摄的影像(人、物)投射到布景箱中的主体模型景观中,演示故事的发展过程。绘声绘色,虚幻莫测,非常直观,给人留下较深的印象。由立体模型场景、造型灯光系统、光学成像系统(应用幻影成像膜作为成像介质)、影视播放系统、计算机多媒体系统、音响系统及控制系统组成,可以实现大的场景、复杂的生产流水线、大型产品等的逼真展示。幻影成像的优点在于它成像逼真,立体特效很炫,无需戴3D眼镜就能够达到以假乱真的效果。 幻影成像技术已经在国外广泛使用,在国内的各类博物馆、名人故居、百年古镇、历史名街、主题公园、遗址公园、城市规划展示馆等也开始逐渐应用。 全息投影分为三大类:180度全息投影、270度全息投影、360度全息投影。 180度全息投影 180度全息不用戴3D眼镜的立体特效。轻灵的物体在无尽的空间浮动,似乎触手可及。 全息幻像通过复杂的光学作用在展示台上立体呈现、栩栩如生。 适用于展览会、新闻发布会、大型会议租赁展示,博物馆等展览场馆固定安装使用。 270全息投影 270度全息为全息影像的一种,全息影像其实就是实现真实的三维图像的记录和再现。一般的三维图只是在二维的平面上通过构图及色彩明暗变化实现人眼的三维感觉,而全息立体投影产生的全息图则包含了被记录物体的尺寸、形状、亮度和对比度等信息,提供视差。观察者可以通过前后、左右和上下移动来观察图像的不同形象如同有个真实的物体在那里一样。 适用于大型购物中心,可用于展示珠宝名表数码产品等高端精致商品;高端酒店、高级会所,可用于展示企业LOGO、名酒名品或者作为装潢风格体现;房地产行业应用,可用于展示户型等;其它活动秀场,用于发布会等场所,作为场会布置的亮点运用。 360度全息投影 360全息影像也被称之为、全息三维成像,它是由透明材料制成的四面锥体,观众的视线能从任何一面穿透它,通过,观众能从锥形空间里看到自由飘浮的影像和图形。四面视频成像将光信号反射到这个锥体中的特殊棱镜上,汇集到一起后形成具有真实维度空间的立体影像。可以使立体影像不借助任何屏幕或介质而直接悬浮在设备外的自由空间,并且360°任意角度看都是三维影像展现,这种展示手段打破常规的实物展示手段立体影像的清晰度及色彩还真度高,立体感强,因此非常逼真,可以给观众以新奇、玄妙的视觉冲击,激发观众探究欲,并可以起到聚集现场人气、加深参观者印象、提高被展示物知名度的作用。 360度全息是一种将三维画面悬浮在实景的半空中成像,营造了亦幻亦真的氛围,效果奇特,具有强烈的纵深感,真假难辩。形成空中幻象中间可结合实物,实现影像与实物的结合。也可配加触摸屏实现与观众的互动 。可以根据要求做成四面窗口,每面最大2-4米。可做成全息幻影舞台,产品立体360度的演示;真人和虚幻人同台表演;科技馆的梦幻舞台等。也适用于各种产品的展出,发布。如:名表、名车、珠宝、工业产品的展出和发布。 互动应用 互动投影系统为融合当今世界最高科技的广告和娱乐互动系统;互动影音系统提供一种不同寻常并激动人心的广告与娱乐交相辉映的效果系统,适用于所有公共室内场所,特别是休闲、购物、娱乐及教育场所。 互动应用主要包括:地面互动投影、墙面互动投影、桌面互动、隔空互动、AR互动、电子翻书等。 地面互动投影 地面互动投影采用悬挂在顶部的投影设备把影像效果投射到地面,当参访着走至投影区域时,通过系统识别,参访者可以直接使用双脚或动作与投影幕上的虚拟场景进行交互,互动效果就会随着你的脚步产生相应的变幻。投石地面互动投影系统是集虚拟仿真技术、图像识别技术于一身的互动投影项目,包括水波纹、翻转、碰撞、擦除、避让、跟随等表现形式。观众通过身体动作来与地面的图像进行互动,各种特效影像在脚下绽放,带来一种全新的奇特的体验。 地面互动投影可用于中心商城、连锁大卖场、品牌旗舰店 等消费场所;动漫城、娱乐城、电影院、夜总会 等人流聚集区;机场、地铁、火车站等城市枢纽中心;大型庆典、交易会、展览会、产品推介会 等活动场所;图书馆、博物馆、展览馆、学校、信息中心等教育中心。 墙面互动投影 墙面互动投影系统的运作原理首先是通过捕捉设备(感应器)对目标影像(如参与者)进行捕捉拍摄,然后又影像分析系统分析,从而产生被捕捉物体的动作,该动作数据结合实时影像互动系统,使参与者与屏幕之间产生紧密结合的互动效果。 墙面互动投影技术,可以把人体的直观运动与墙面有机结合,创造全新的互动空间。它集合了丰富的效果,高清晰的视屏以及多种图形的运用,能轻易的在任何公共区域带来令人兴奋、有趣的互动体验,调动观众的参与积极性,方便聚拢人气。无论是蓝色海洋还是盛开的花海,可以随意的选择。奇幻的视觉效果和美妙的动感和互动观看,通过互动画面和声音吸引顾客和观众驻足停留。 墙面互动投影系统可以展示丰富的内容,有图片、文字、影音等,尤其是各种有趣的互动小游戏。观众可以用肢体与投影画面中的内容进行互动,带来一种不同寻常的广告和娱乐交相辉映的效果,可以起到很好的活跃气氛,增加了展示的科技含量,也为企业用户提供具有创意内容的展示效果,提高了现场人气度和相关单位的形象,有很好的宣传效果。 墙面互动投影适用于范围很广泛,可以是科技展厅、企业展厅等展览会场,迪吧、酒吧、KTV等娱乐场所,也可以是商场、酒店宾馆、新品发布会、促销活动,以及婚庆婚典、广场等。 桌面互动 桌面投影游戏的工作原理和地面投影系统基本一致,通过对投影画面特定区域内游戏参与者的动作或手势的变动,从而执行特定的游戏动作或产生特定的游戏效果。由于游戏的互动性和相应动感效果反馈,使得游戏参与者如果自身置身于游戏其中一样,同时各种游戏奖励和惩罚系统更能够带动游戏参与者的游戏激情,从而带动整体消费体验。 桌面互动也可利用多媒体触摸查询技术,多媒体触控查询技术的应用非常之广泛,是结合文字、图形、影像、声音、动画等各种媒体的一种应用,并且是建立在数字化处理的基础上,它具有多种技术的系统集成性,基本上包含了当今计算机领域内最新的硬件技术和软件技术。通过触摸屏查询设备,以图片、文字、声音、视频、动画等多媒体方式进行展示查询。观众可随意方便地进行欣赏和查询各种信息。 适用于大型会议、产品发布会议;商场、企业展厅;展览、展示互动式展台;各类交通信息查询系统;高级酒店、写字楼等各类会所引导、演示及信息查询;各类产品形象店导购、演示及信息查询;高级会议厅演示系统等。 隔空互动 隔空操作是采用先进的计算机视觉技术及光影捕捉技术,随着手指的挥动、在不接触任何物体的情况下做出手势,根据自己的要求发出一些信号,画面就会做出相应的变化,例如对图片、视频进行放大缩小、拖拽、旋转、播放及暂停、可操控赛车游戏等,可支持多人同时操作,让操作变得更灵活。不在局限于传统的鼠标键盘操作形式的束缚。观众通过身体手指动作来与大屏幕的图像进行互动,任意选择菜单栏目。隔空互动操作系统能带给观众一种全新的互动体验。 AR互动 AR(Augmented Reality)互动:增强现实是一种全新的人机交互技术 ,利用这样一种技术 ,可以模拟真实的现场景观 ,它是以交互性和构想为基本特征的计算机高级人机界面。使用者不仅能够通过虚拟现实系统感受到在客观物理世界中所经历的"身临其境"的逼真性 ,而且能够突破空间、时间以及其它客观限制 ,感受到在真实世界中无法亲身经历的体验。 AR互动借助计算机图形技术和可视化技术产生现实环境中不存在的虚拟对象,并通过传感技术将虚拟对象准确"放置"在真实环境中,借助显示设备将虚拟对象与真实环境融为一体,并呈现给使用者一个感官效果真实的新环境。 在增强现实的环境中 ,使用者可以在看到周围真实环境的同时 ,还可以看到计算机产生的增强信息。由于增强现实在虚拟现实与真实世界之间的沟壑上架起了一座桥梁,因此 ,增强现实的应用潜力是相当巨大的 ,它可以广泛应用于军事、医学、制造与维修、娱乐等众多领域。 电子翻书 电子翻书系是利用动作感应技术以及计算机多媒体技术实现的一种虚拟翻书的视觉效果。它展现在参观者面前的是一本以大屏幕投影机投影方式展现的电子书,参观者只需要站在展台前方,伸出手臂,在空中做出左右挥动手臂的动作,则计算机就能识别出参观者的动作,参观者面前的电子书就会随着手臂的左右挥动进行前后的翻页,栩栩如生的动态翻页效果让观众在惊叹神奇虚拟技术的同时,也会对图书内容产生浓厚的兴趣。 裸眼3D投影 裸眼3D投影是一种无需配戴眼镜的3D技术,观众可以看到立体的虚拟人物或虚拟场景的技术。一般裸眼3D投影运用在大型墙面投影比较多,3D墙体投影制作搭建是以建筑物作为背景,通过投影成像系统,将生动和动态的动画和建筑装饰相互结合,对画面、颜色以及光线进行不断的动态改变,从而实现空间的拓展、变幻,让整个空间呈现一种质感极强的3D效果,让观众产生一种难以自拔的错觉,仿佛整个建筑都处于一个虚幻的空间,这就是前提投影的动态效果。 大屏融合 大屏幕融合是一种拼接、几何校正、图像边缘融合一体化的处理方式,支持融合带的宽度调整、及多边形显示、不规则投影显示。投影融合技术就是将一组投影机投射出的画面进行边缘重叠,并通过融合技术显示出一个没有缝隙更加明亮,超大,高分辨率的整幅画面,画面的效果就象是一台投影机投射的画面。 当二台或多台投影机组合投射一幅画面时,会有一部分影象重叠,边缘融合的最主要功能就是把二台投影机重叠部分的灯光亮度逐渐调低,使整幅画面的亮度一致。 比较常见的大屏融合有:弧幕、环幕、球幕、穹幕、U型幕、折幕、沉浸式投影、异形拼接等。 数字展厅 数字展厅又叫做数字化展厅、多媒体数字化展厅等,是指以多媒体和数字化技术作为展示技术,使用最新的影视动画技术,结合独到的图形数字和多媒体技术,以各类新颖的技术吸引参观者,实现人机交互方式的展厅形式。集各种多媒体展览展示系统为一体的综合展示平台,包括数字沙盘、环幕/弧幕/球幕影厅、迎宾地幕系统、互动吧台、互动镜面及触摸屏等等。同时,由于融入了各种高新科技技术,让展厅极具内涵和吸引力,通过对视频、声音、动画等媒体加以组合应用,深度挖掘展览陈列对象所蕴含的背景、意义,带给观众高科技的视觉震撼感,大大提升了品牌的价值。 投影工程 多媒体系统集成 多媒体系统集成包括计算机软件、硬件、操作系统技术、数据库技术、网络通讯技术等的集成,是将各个分离的设备(如个人电脑)、功能和信息等集成到相互关联的、统一和协调的系统之中,使资源达到充分共享,实现集中、高效、便利的管理。系统集成实现的关键在于解决系统之间的互连和互操作性问题,它是一个多厂商、多协议和面向各种应用的体系结构。这需要解决各类设备、子系统间的接口、协议、系统平台、应用软件等与子系统、建筑环境、施工配合、组织管理和人员配备相关的一切面向集成的问题。可以给人一种视觉听觉与触觉的感受。 片源制作 软件开发制作 软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。 软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 经营理念Soley creative(完全创新)
10. 小叶紫檀这种老料的好坏只能数年轮辨别吗
虽然根据常识,树龄是可以看年轮来辨别的,但对于小叶紫檀来说,这种算法却不能通用,因为紫檀长到一定程度后,年轮反而开始变得模糊了,有些甚至被挤压扭曲,根本没法数,所以对于按年轮辨料子新老这个方法玩友们还是不要太执着了。
来看这块印度房梁老料,虽然表面斑驳,沟壑纵深,看似毫无美感可言,但这都是岁月留下的痕迹,多看两眼,不自觉就被会它的沧桑美感所吸引,忍不住想要探究它走过哪些光阴岁月。再看来这件取自拆房老料制作的笔筒,密致紧实的纹路是其走过峥嵘岁月的见证,未经刻意雕琢,却自有一味的外形是那段光阴给予它最好的回馈,那抹绿漆更给这件美物增加了一份意外之喜。