mieki256's diary



2021/09/18() [n年前の日記]

#1 [windows] WindowsUpdateのせいで共有プリンタから印刷できなくなっていた

数日前に、某所から、「プリンタで印刷できない」と不具合相談を受けていたのだけど。

構成としては、Windows8.1機にUSBケーブル接続で EPSON PX-M6711FT が繋がっていて、かつ、共有プリンタに設定してある状態。LAN内の他のPC(Windows8.1機)から、共有プリンタに ―― プリンタが繋がってる Windows8.1機に対して印刷指示を出しても、「印刷できない」と言ってくる、とのことで。

某所の方に頼んで、ping を打ってもらって、各IPアドレスまで届いてるか、名前解決ができているか、等々を調べてもらっていたのだけど、そのあたりは問題が無く…。

結論を先に書くと、おそらく、2021/09/15から配布が始まった WindowsUpdate のせいだろうと…。

_KB5005565に印刷ができなくなる不具合。対処方法あり | ニッチなPCゲーマーの環境構築Z
_Windows 10に新たな印刷問題 〜2021年8月のセキュリティパッチ以降で - 窓の杜
_Print server and Print Nightmare update - Microsoft Q&A
_New Windows security updates break network printing
_【WinUp個別】急報・・・9/15のWinUp後にUSBプリンタ共有に不具合発生中か?【2021/9/17】 - 自作PCの道楽新館

我が家のLAN内でも不具合に遭遇。 :

ふと今頃になって、考えてみたら我が家のLAN内でも似た構成になっていることに気が付いて。

自分のメインPC(Windows10 x64 21H1)には、USBケーブル接続で Canon iP4600 が繋がっていて、かつ、共有プリンタとしても設定してある。普段、妹のPC(Windows10)から、自分のメインPCに向けて印刷指示を出して印刷していたのだけど。

妹に頼んでテスト印刷ができるかどうか確認してもらったら、エラーメッセージも何も出さずにだんまり状態になってしまった。メッセージが出る・出ないとか、OS種類とか、プリンタの型番の違いはあるけれど、某所と構成は似ているし、印刷できない点は同じ。

試しに、2021/09/16〜17にインストールされた KB5005565 を、ホスト側PC、クライアント側PCの両方からアンインストールしたところ、実にあっけなく、すんなりと、印刷ができてしまった…。

ということで、これはもう、どう考えても、WindowsUpdate のせいだろうと…。

ちなみに、KB5005565 をアンインストールしようとしたら、再起動してデスクトップが表示されるまで、以下の時間がかかった…。
  • HDD環境では20分以上。
  • SSD環境ですら10分前後。
アンインストールを試してみる場合は、かなり待たされることを覚悟しつつ作業しないとアレだなと…。フリーズしてると勘違いして途中で電源を切らないように。とにかく待たされます。

USB接続がマズいらしい。 :

この不具合は、プリンタがUSB接続されていて、かつ、共有プリンタに設定されている場合に発生する模様。

例えば、自分のメインPCからプリンタで印刷する場合は問題無く印刷できた。しかし、同じLAN内に居る別のPCから印刷しようとすると印刷できない、という症状で…。

また、プリンタが、LANケーブルによる有線接続、もしくは、Wi-Fiによる無線接続で、LANに直接参加してる場合も問題は起きない。某所でも、LANに直接参加してるプリンタからは印刷ができている、と報告があった。

今時のプリンタ(複合機)は、Wi-Fiによる無線接続でLANに直接参加してる場合が多いのだろうから、その場合はトラップが発動しないのだろうなと…。

#2 [love2d] love2dでテクスチャ付きポリゴンを歪めずに描画したい

love2d 11.3 上で、テクスチャ付きポリゴンを描画したい。

Mesh を使えば描画できることは分った。ただ、そのまま描画すると、四角形等を描画した際に見た目がめっちゃ歪んでしまう。

_love2dでテクスチャ付きポリゴンを描画したい

解決策は無いものか。

とりあえず、四角形を細かく分割して描画すれば、見た目ではさほど歪みが気にならなくなるのではないか…と思ったので試してみた。

ソースと使用画像。 :

ソースと使用画像は以下。

_conf.lua
function love.conf(t)
  t.window.title = "Love2d Mesh divide"
  t.window.width = 640
  t.window.height = 480
  t.window.vsync = true
  t.modules.joystick = false
  -- t.window.fullscreen = true
  -- t.window.fullscreentype = "exclusive"
end

_main.lua
-- Love2d Mesh

function makeVertices(src, xc, yc)
  xyuv = {}
  local xi, yi, u, v
  local yi = 0
  for yi = 0, yc do
    v = yi / yc
    local sx0 = (src[4][1] - src[1][1]) * v + src[1][1]
    local sy0 = (src[4][2] - src[1][2]) * v + src[1][2]
    local sx1 = (src[3][1] - src[2][1]) * v + src[2][1]
    local sy1 = (src[3][2] - src[2][2]) * v + src[2][2]
    for xi = 0, xc do
      u = xi / xc
      local x = (sx1 - sx0) * u + sx0
      local y = (sy1 - sy0) * u + sy0
      table.insert(xyuv, {x, y, u, v})
    end
  end

  vidx = {}
  for y = 1, yc do
    for x = 1, xc do
      local i0 = x + ((xc + 1) * (y - 1))
      local i1 = i0 + 1
      local i2 = i0 + (xc + 1)
      local i3 = i2 + 1
      table.insert(vidx, i0)
      table.insert(vidx, i1)
      table.insert(vidx, i2)

      table.insert(vidx, i2)
      table.insert(vidx, i1)
      table.insert(vidx, i3)
    end
  end

  vt = {}
  for j = 1, #vidx do
    local i = vidx[j]
    local x, y, u, v
    x, y = xyuv[i][1], xyuv[i][2]
    u, v = xyuv[i][3], xyuv[i][4]
    table.insert(vt, {x, y, u, v, 1.0, 1.0, 1.0, 1.0})
  end

  return vt, xyuv
end

-- init
function love.load()
  -- get window width and height
  wdw_w, wdw_h = love.graphics.getDimensions()

  img = love.graphics.newImage("uvcheckermap01-512.png")

  divide = 3

  -- src = { {270, 40}, {370, 40}, {620, 440}, {20, 440} }
  -- src = { {270, 20}, {370, 60}, {620, 350}, {20, 440} }
  src = { {270, 240}, {370, 240}, {630, 460}, {10, 460} }

  vert, xyuv = makeVertices(src, divide, divide)

  mesh = love.graphics.newMesh(vert, "triangles")
  mesh:setTexture(img)

  guide = true
  mesh_refresh = false

  ang = 0
end

-- update
function love.update(dt)
  if mesh_refresh then
    vert, xyuv = makeVertices(src, divide, divide)
    mesh = love.graphics.newMesh(vert, "triangles")
    mesh:setTexture(img)
  end

  ang = ang + 90 * dt
  local d = 140 * math.sin(math.rad(ang))

  -- change x0, x1
  src[1][1] = (wdw_w / 2) - 150 + d
  src[2][1] = (wdw_w / 2) + 150 - d

  vert, xyuv = makeVertices(src, divide, divide)
  mesh:setVertices(vert, 1)
end

-- draw
function love.draw()
  -- fill BG color
  love.graphics.setColor(0.1, 0.2, 0.4)
  love.graphics.rectangle("fill", 0, 0, wdw_w, wdw_h)

  -- draw mesh
  love.graphics.setColor(1, 1, 1)
  love.graphics.draw(mesh, 0, 0)

  if guide then
    -- draw lines
    love.graphics.setColor(1, 1, 1, 0.5)
    for i=1, #vert, 3 do
      local vlst = {vert[i][1], vert[i][2], vert[i+1][1], vert[i+1][2], vert[i+2][1], vert[i+2][2]}
      love.graphics.polygon("line", vlst)
    end

    --draw points
    love.graphics.setColor(0, 1, 1, 0.5)
    for i = 1, #xyuv do
      local x = xyuv[i][1]
      local y = xyuv[i][2]
      love.graphics.ellipse("line", x, y, 3, 3)
    end
  end

  -- print FPS
  love.graphics.setColor(1, 1, 1)
  love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 2, 2)
  love.graphics.print("Divide: "..tostring(divide), 2, 20)
  love.graphics.print("G key : Guide on/off", 2, 40)
  love.graphics.print("Up, Down : Divide +/-", 2, 60)
end

function love.keypressed(key, isrepeat)
  -- ESC to exit
  if key == "escape" then
    love.event.quit()
  end
  if key == "g" then
    guide = not guide
  end
  if key == "up" then
    if divide < 32 then
      divide = divide + 1
    end
    mesh_refresh = true
  end
  if key == "down" then
    if divide > 2 then
      divide = divide - 1
    end
    mesh_refresh = true
  end
end

使用画像は以下。

_uvcheckermap01-512.png

以下で公開されてる画像を利用させてもらいました。ありがたや。

_Arahnoid/UVChecker-map: A collection of free images what can be used during unwrapping of 3D models

実行結果。 :

実行すると、Gキーで分割状態表示のON/OFFが切り替えられる。また、カーソルキーの上下で、分割数を 2 - 32 まで変更できる。




一応、 _LoVE Web Builder を利用させてもらって、Webブラウザ上でも動かせるようにしてみた。

_06_mesh_divide_c

Windows10 x64 21H1 + Firefox 92.0 64bit、Google Chrome 93.0.4577.82 64bit では動いているけど、どうだろう。

ちなみに、CPU は Ryzen 7 1700 (8コア、16スレッド、3.0GHz)、GPU(ビデオカード)は GeForce GTX 1060 6GB で動作確認した。このスペックなら 60FPS で動いてるように見える。ただ、それはローカルで動かした場合の話で、Webブラウザ上で動かすと11x11分割あたりから60FPSでは間に合わなくなってくる…。

雑感。 :

4x4分割、もしくは、8x8分割ぐらいで、そこそこ歪みが気にならなくなった印象を受けた。16x16分割まで行けば、全然歪んでるようには見えない。まあ、描画面積も関係してくるのだろうけど…。今回、ウインドウサイズは 640x480 だけど、1280x720 や 1920x1080 なら歪みが感じられる可能性もありそう。

ただ、毎フレーム、四角形の頂点の描画位置が変わるとなると、分割のための再計算も毎フレーム必要になるわけで…。4x4分割なら25個の頂点を、8x8分割なら81個の頂点を再計算しないといけない。1〜2枚を処理するなら問題無いかもしれんけど、例えば何十枚も処理をしたらどうなるのかちょっと分からないなと。実際、前述したように、Webブラウザ上で動かしたら11x11分割あたりで処理落ちが始まった。

また、あくまで2D的に分割しているので、こういうソレを使って3D的な見せ方をしようとするなら、元テクスチャ自体に遠近感を盛り込む等の工夫が必要になるのかもしれない。

遠近感を意識した分割はできないのだろうか。やろうと思えばできるはず。ていうか、以前DXRubyを使ってやったことがあるし。

_DXRuby上で射影変換ができた
_DXRubyのShaderで射影変換

でも、使い道が…。そもそも 3Dっぽく見せたいなら Unity や Godot Engine を使ったほうが、という気分にもなるわけで。2Dゲームエンジンの love2d で無理してやらんでも、みたいな。

#3 [nitijyou] 日記をアップロード

2021/09/03を最後に日記をアップロードしてなかったのでアップロード。

以上、1 日分です。

過去ログ表示

Prev - 2021/09 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project